@cachly-dev/mcp-server 0.9.10 → 0.9.12
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/dist/index.js +47 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +48 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cachly-dev/mcp-server",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.12",
|
|
4
4
|
"mcpName": "io.github.cachly-dev/cachly-mcp",
|
|
5
5
|
"description": "Your AI forgets everything between sessions. cachly fixes that permanently. A causal brain that learns WHY things break — built from every bug fix, git commit, and CI run, without any explicit calls. Arrives pre-briefed each session. Predicts failures before they happen. Never re-researches the same problem. 63 MCP tools · Claude Code · Cursor · GitHub Copilot · Windsurf · Free tier · EU servers.",
|
|
6
6
|
"type": "module",
|
package/src/index.ts
CHANGED
|
@@ -2486,7 +2486,11 @@ const TOOLS = [
|
|
|
2486
2486
|
name: 'cache_get',
|
|
2487
2487
|
description:
|
|
2488
2488
|
'Get a value from a running cache instance by key. ' +
|
|
2489
|
-
'Returns the value (string or JSON) or null if the key does not exist.'
|
|
2489
|
+
'Returns the stored value (string or deserialized JSON object) or null if the key does not exist or has expired. ' +
|
|
2490
|
+
'Read-only — no side effects. ' +
|
|
2491
|
+
'Use cache_mget when you need multiple keys in one round-trip. ' +
|
|
2492
|
+
'Use cache_exists to check existence without retrieving the value. ' +
|
|
2493
|
+
'Use semantic_search when you need fuzzy/vector search across stored values.',
|
|
2490
2494
|
inputSchema: {
|
|
2491
2495
|
type: 'object',
|
|
2492
2496
|
properties: {
|
|
@@ -2500,11 +2504,15 @@ const TOOLS = [
|
|
|
2500
2504
|
name: 'cache_set',
|
|
2501
2505
|
description:
|
|
2502
2506
|
'Set a key-value pair in a running cache instance. ' +
|
|
2503
|
-
'
|
|
2507
|
+
'Overwrites any existing value at the key — not idempotent for new data. ' +
|
|
2508
|
+
'Returns "OK" on success; returns an error if the instance_id is invalid or the instance is paused. ' +
|
|
2509
|
+
'Value can be a string or a JSON-serialized object. Optionally set a TTL in seconds (omit for no expiry). ' +
|
|
2510
|
+
'Use cache_mset instead for setting multiple keys in a single pipeline round-trip. ' +
|
|
2511
|
+
'Use cache_stream_set instead for caching LLM token streams (ordered string chunks).',
|
|
2504
2512
|
inputSchema: {
|
|
2505
2513
|
type: 'object',
|
|
2506
2514
|
properties: {
|
|
2507
|
-
instance_id: { type: 'string' },
|
|
2515
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance (from list_instances)' },
|
|
2508
2516
|
key: { type: 'string', description: 'Cache key' },
|
|
2509
2517
|
value: { type: 'string', description: 'Value to store (string or JSON)' },
|
|
2510
2518
|
ttl: { type: 'number', description: 'Time-to-live in seconds (optional, omit for no expiry)' },
|
|
@@ -2554,12 +2562,16 @@ const TOOLS = [
|
|
|
2554
2562
|
},
|
|
2555
2563
|
{
|
|
2556
2564
|
name: 'cache_ttl',
|
|
2557
|
-
description:
|
|
2565
|
+
description:
|
|
2566
|
+
'Get the remaining time-to-live (TTL) of a key in seconds. ' +
|
|
2567
|
+
'Returns -1 if the key exists but has no expiry, -2 if the key does not exist. ' +
|
|
2568
|
+
'Read-only — no side effects. ' +
|
|
2569
|
+
'Use cache_set with a ttl parameter to set or update the expiry.',
|
|
2558
2570
|
inputSchema: {
|
|
2559
2571
|
type: 'object',
|
|
2560
2572
|
properties: {
|
|
2561
|
-
instance_id: { type: 'string' },
|
|
2562
|
-
key: { type: 'string' },
|
|
2573
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance (from list_instances)' },
|
|
2574
|
+
key: { type: 'string', description: 'Cache key to inspect' },
|
|
2563
2575
|
},
|
|
2564
2576
|
required: ['instance_id', 'key'],
|
|
2565
2577
|
},
|
|
@@ -2600,13 +2612,17 @@ const TOOLS = [
|
|
|
2600
2612
|
name: 'semantic_search',
|
|
2601
2613
|
description:
|
|
2602
2614
|
'Find cached entries that are semantically similar to a natural-language query. ' +
|
|
2603
|
-
'
|
|
2604
|
-
'
|
|
2605
|
-
'
|
|
2615
|
+
'Read-only — no side effects. ' +
|
|
2616
|
+
'Returns an array of objects, each with: key, value, similarity_score (0–1), and namespace. ' +
|
|
2617
|
+
'Returns an empty array if no entries meet the similarity threshold. ' +
|
|
2618
|
+
'Requires OPENAI_API_KEY (or compatible provider) and the Speed/Business tier with CACHLY_VECTOR_URL. ' +
|
|
2619
|
+
'Embeddings are computed server-side and never leave Germany (pgvector HNSW index). ' +
|
|
2620
|
+
'Example: "find all cached responses about password reset" or "what did we answer about pricing?". ' +
|
|
2621
|
+
'Use cache_get for exact key lookup; use smart_recall for brain lessons.',
|
|
2606
2622
|
inputSchema: {
|
|
2607
2623
|
type: 'object',
|
|
2608
2624
|
properties: {
|
|
2609
|
-
instance_id: { type: 'string' },
|
|
2625
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance (from list_instances)' },
|
|
2610
2626
|
query: { type: 'string', description: 'Natural-language query to find similar cached content' },
|
|
2611
2627
|
threshold: {
|
|
2612
2628
|
type: 'number',
|
|
@@ -2745,7 +2761,11 @@ const TOOLS = [
|
|
|
2745
2761
|
description:
|
|
2746
2762
|
'Set multiple key-value pairs in a single pipeline round-trip. ' +
|
|
2747
2763
|
'Supports per-key TTL – unlike native MSET. ' +
|
|
2748
|
-
'Uses one TCP round-trip for N keys via Redis pipeline.'
|
|
2764
|
+
'Uses one TCP round-trip for N keys via Redis pipeline. ' +
|
|
2765
|
+
'Each item overwrites any existing value for that key. ' +
|
|
2766
|
+
'On partial failure the successfully pipelined keys are committed; a per-key error list is returned for any that failed. ' +
|
|
2767
|
+
'Returns a summary: { set: N, errors: [...] }. ' +
|
|
2768
|
+
'Use cache_set for a single key; use cache_stream_set for large streaming payloads.',
|
|
2749
2769
|
inputSchema: {
|
|
2750
2770
|
type: 'object',
|
|
2751
2771
|
properties: {
|
|
@@ -2833,8 +2853,11 @@ const TOOLS = [
|
|
|
2833
2853
|
'Perfect for caching: codebase overviews, file summaries, project structure, ' +
|
|
2834
2854
|
'frequently-accessed data, or "thinking" results like dependency analysis. ' +
|
|
2835
2855
|
'The AI assistant can use this to avoid re-reading the entire codebase every time. ' +
|
|
2856
|
+
'Overwrites any existing value stored under the same key. ' +
|
|
2857
|
+
'Returns { key, stored_at, ttl } confirming the saved context. ' +
|
|
2836
2858
|
'Example: remember_context("project overview", "This is a Next.js app with...") ' +
|
|
2837
|
-
'then later: recall_context("project overview")'
|
|
2859
|
+
'then later: recall_context("project overview"). ' +
|
|
2860
|
+
'Use recall_context to retrieve; use list_remembered to see all stored keys.',
|
|
2838
2861
|
inputSchema: {
|
|
2839
2862
|
type: 'object',
|
|
2840
2863
|
properties: {
|
|
@@ -3392,9 +3415,12 @@ const TOOLS = [
|
|
|
3392
3415
|
name: 'global_learn',
|
|
3393
3416
|
description:
|
|
3394
3417
|
'Store a lesson that applies across ALL your projects (cross-project knowledge). ' +
|
|
3418
|
+
'Idempotent: if a lesson with the same topic already exists, it is updated in place — no duplicates are created. ' +
|
|
3419
|
+
'Returns a confirmation with the stored lesson key. No rate limits. ' +
|
|
3395
3420
|
'Global lessons are stored with the prefix cachly:global:lesson: and recalled from any instance via global_recall. ' +
|
|
3396
3421
|
'Use for tool preferences, personal workflows, platform quirks, and universal gotchas. ' +
|
|
3397
|
-
'Example: global_learn(topic="bash:macos-arrays", lesson="Arrays work differently on macOS bash 3.2")'
|
|
3422
|
+
'Example: global_learn(topic="bash:macos-arrays", lesson="Arrays work differently on macOS bash 3.2"). ' +
|
|
3423
|
+
'Use learn_from_attempts for project-specific session lessons; use team_learn to share lessons with your team.',
|
|
3398
3424
|
inputSchema: {
|
|
3399
3425
|
type: 'object',
|
|
3400
3426
|
properties: {
|
|
@@ -3430,7 +3456,11 @@ const TOOLS = [
|
|
|
3430
3456
|
description:
|
|
3431
3457
|
'Publish a lesson to the Cachly Public Brain (anonymized community knowledge base). ' +
|
|
3432
3458
|
'Published lessons can be imported by other developers via import_public_brain. ' +
|
|
3433
|
-
'PII is stripped automatically. Visible under the framework/category tag.'
|
|
3459
|
+
'PII is stripped automatically. Visible under the framework/category tag. ' +
|
|
3460
|
+
'Returns { lesson_id, topic, framework, published_at } confirming the publish. ' +
|
|
3461
|
+
'Irreversible — once published to the public brain, lessons cannot be deleted via the MCP interface. ' +
|
|
3462
|
+
'Use learn_from_attempts or global_learn for private lessons; ' +
|
|
3463
|
+
'use syndicate for anonymized global sharing without framework tagging.',
|
|
3434
3464
|
inputSchema: {
|
|
3435
3465
|
type: 'object',
|
|
3436
3466
|
properties: {
|
|
@@ -3746,7 +3776,10 @@ const TOOLS = [
|
|
|
3746
3776
|
'This is how individual knowledge becomes collective intelligence. ' +
|
|
3747
3777
|
'Call this AFTER every learn_from_attempts that is worth sharing universally ' +
|
|
3748
3778
|
'(critical bugs, deployment gotchas, architecture discoveries). ' +
|
|
3749
|
-
'
|
|
3779
|
+
'If a lesson with the same topic already exists in the commons, it is updated in place (idempotent). ' +
|
|
3780
|
+
'Returns { key, confirm_count, scope } confirming the stored lesson. ' +
|
|
3781
|
+
'Use scope="org" to keep the lesson private to your organisation. ' +
|
|
3782
|
+
'Do NOT use for secrets or PII — content is stored in a shared knowledge base.',
|
|
3750
3783
|
inputSchema: {
|
|
3751
3784
|
type: 'object',
|
|
3752
3785
|
properties: {
|