@cachly-dev/mcp-server 0.9.8 → 0.9.10
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/CHANGELOG.md +30 -70
- package/Dockerfile +2 -4
- package/README.md +173 -310
- package/dist/index.js +64 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/server.json +1 -1
- package/src/index.ts +68 -25
- package/test-features.cjs +23 -0
- package/.github/workflows/publish.yml +0 -42
- package/LICENSE +0 -202
- package/glama.json +0 -6
package/dist/index.js
CHANGED
|
@@ -2363,7 +2363,12 @@ const TOOLS = [
|
|
|
2363
2363
|
// ── Instance Management ──────────────────────────────────────────────────
|
|
2364
2364
|
{
|
|
2365
2365
|
name: 'list_instances',
|
|
2366
|
-
description: 'List all your cachly cache instances with their status and connection details.'
|
|
2366
|
+
description: 'List all your cachly cache instances with their status and connection details. ' +
|
|
2367
|
+
'Read-only. Returns an array of instance objects — each with id, name, tier, status, region, RAM, ' +
|
|
2368
|
+
'and redis:// connection string. Returns an empty array if no instances exist. ' +
|
|
2369
|
+
'No pagination: all instances are returned in one call (typical accounts have < 20). ' +
|
|
2370
|
+
'Use this first to discover instance UUIDs required by get_instance, cache_get, cache_set, ' +
|
|
2371
|
+
'and all other cache tools. Use get_instance to retrieve full metadata for a single instance.',
|
|
2367
2372
|
inputSchema: { type: 'object', properties: {}, required: [] },
|
|
2368
2373
|
},
|
|
2369
2374
|
{
|
|
@@ -2387,7 +2392,11 @@ const TOOLS = [
|
|
|
2387
2392
|
},
|
|
2388
2393
|
{
|
|
2389
2394
|
name: 'get_instance',
|
|
2390
|
-
description: 'Get
|
|
2395
|
+
description: 'Get full metadata for a specific cache instance: name, tier, status (provisioning / running / paused), ' +
|
|
2396
|
+
'region, RAM limit, Redis connection string, created_at, and expiry. Read-only. ' +
|
|
2397
|
+
'Returns an error if the instance_id is not found or belongs to another account. ' +
|
|
2398
|
+
'Call list_instances first to discover valid UUIDs. ' +
|
|
2399
|
+
'Use get_connection_string instead if you only need the redis:// URL for your app config.',
|
|
2391
2400
|
inputSchema: {
|
|
2392
2401
|
type: 'object',
|
|
2393
2402
|
properties: {
|
|
@@ -2452,15 +2461,20 @@ const TOOLS = [
|
|
|
2452
2461
|
},
|
|
2453
2462
|
{
|
|
2454
2463
|
name: 'cache_delete',
|
|
2455
|
-
description: '
|
|
2464
|
+
description: 'Permanently delete one or more keys from a running cache instance (uses Redis DEL). ' +
|
|
2465
|
+
'This operation is destructive and irreversible — deleted keys cannot be recovered. ' +
|
|
2466
|
+
'Deleting a non-existent key is safe and returns 0 for that key (no error). ' +
|
|
2467
|
+
'Returns the count of keys that were actually deleted (existing keys only). ' +
|
|
2468
|
+
'Use this to explicitly remove stale entries; prefer cache_set with a short TTL for auto-expiring data. ' +
|
|
2469
|
+
'Do NOT use this to clear an entire instance — use the dashboard or delete_instance for that.',
|
|
2456
2470
|
inputSchema: {
|
|
2457
2471
|
type: 'object',
|
|
2458
2472
|
properties: {
|
|
2459
|
-
instance_id: { type: 'string' },
|
|
2473
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance to delete keys from (get from list_instances)' },
|
|
2460
2474
|
keys: {
|
|
2461
2475
|
type: 'array',
|
|
2462
2476
|
items: { type: 'string' },
|
|
2463
|
-
description: 'One or more cache keys to delete',
|
|
2477
|
+
description: 'One or more cache keys to delete. Accepts exact keys only (no glob patterns — use cache_keys to list first).',
|
|
2464
2478
|
},
|
|
2465
2479
|
},
|
|
2466
2480
|
required: ['instance_id', 'keys'],
|
|
@@ -2468,12 +2482,17 @@ const TOOLS = [
|
|
|
2468
2482
|
},
|
|
2469
2483
|
{
|
|
2470
2484
|
name: 'cache_exists',
|
|
2471
|
-
description: 'Check whether one or more keys exist in
|
|
2485
|
+
description: 'Check whether one or more keys exist in a running cache instance (uses Redis EXISTS). ' +
|
|
2486
|
+
'Read-only — no side effects. Returns the count of keys that currently exist (integer 0 to N). ' +
|
|
2487
|
+
'If none of the keys exist, returns 0. If all exist, returns the total key count passed in. ' +
|
|
2488
|
+
'Duplicate keys in the input array are each counted separately (Redis behavior). ' +
|
|
2489
|
+
'Use this to check presence before a cache_get to avoid null handling, or to verify a cache warm-up completed. ' +
|
|
2490
|
+
'Use cache_get instead if you also need the value; use cache_ttl if you need expiry info.',
|
|
2472
2491
|
inputSchema: {
|
|
2473
2492
|
type: 'object',
|
|
2474
2493
|
properties: {
|
|
2475
|
-
instance_id: { type: 'string' },
|
|
2476
|
-
keys: { type: 'array', items: { type: 'string' }, description: 'Keys to check' },
|
|
2494
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance to check (get from list_instances)' },
|
|
2495
|
+
keys: { type: 'array', items: { type: 'string' }, description: 'Keys to check for existence. Accepts exact keys only (no glob patterns).' },
|
|
2477
2496
|
},
|
|
2478
2497
|
required: ['instance_id', 'keys'],
|
|
2479
2498
|
},
|
|
@@ -2507,11 +2526,15 @@ const TOOLS = [
|
|
|
2507
2526
|
{
|
|
2508
2527
|
name: 'cache_stats',
|
|
2509
2528
|
description: 'Get real-time stats for a cache instance: memory usage, hit/miss rate, commands/sec, ' +
|
|
2510
|
-
'connected clients, keyspace info, and uptime.'
|
|
2529
|
+
'connected clients, keyspace info, and uptime. Read-only — no side effects. ' +
|
|
2530
|
+
'The instance_id identifies the target instance (obtain from list_instances). ' +
|
|
2531
|
+
'Use this for monitoring, capacity planning, or debugging performance issues — ' +
|
|
2532
|
+
'not for reading cached values (use cache_get for that). ' +
|
|
2533
|
+
'Use cache_exists or cache_ttl if you only need key-level information.',
|
|
2511
2534
|
inputSchema: {
|
|
2512
2535
|
type: 'object',
|
|
2513
2536
|
properties: {
|
|
2514
|
-
instance_id: { type: 'string' },
|
|
2537
|
+
instance_id: { type: 'string', description: 'UUID of the cache instance (from list_instances)' },
|
|
2515
2538
|
},
|
|
2516
2539
|
required: ['instance_id'],
|
|
2517
2540
|
},
|
|
@@ -3294,8 +3317,12 @@ const TOOLS = [
|
|
|
3294
3317
|
},
|
|
3295
3318
|
{
|
|
3296
3319
|
name: 'global_recall',
|
|
3297
|
-
description: '
|
|
3298
|
-
'Returns
|
|
3320
|
+
description: 'Read-only retrieval of cross-project lessons stored via global_learn. No side effects. ' +
|
|
3321
|
+
'Returns a list of matching global lesson objects, each with topic, lesson text, severity, and tags. ' +
|
|
3322
|
+
'If no topic is provided, returns all global lessons (up to 50). ' +
|
|
3323
|
+
'If topic is provided, returns all lessons whose topic key contains that string (partial match). ' +
|
|
3324
|
+
'Use this for lessons that apply universally across all projects (tool quirks, shell gotchas, platform behavior). ' +
|
|
3325
|
+
'Use recall_best_solution instead for project-specific lessons; use team_recall for org-scoped lessons.',
|
|
3299
3326
|
inputSchema: {
|
|
3300
3327
|
type: 'object',
|
|
3301
3328
|
properties: {
|
|
@@ -3325,8 +3352,12 @@ const TOOLS = [
|
|
|
3325
3352
|
{
|
|
3326
3353
|
name: 'import_public_brain',
|
|
3327
3354
|
description: 'Import community lessons from the Cachly Public Brain for a framework. ' +
|
|
3328
|
-
'
|
|
3329
|
-
'
|
|
3355
|
+
'Non-destructive: existing lessons with the same topic key are not overwritten. ' +
|
|
3356
|
+
'Returns the count of lessons imported and their topic slugs. ' +
|
|
3357
|
+
'Available frameworks: nextjs, fastapi, go, docker, kubernetes, react, typescript, python, rust, laravel, rails, spring. ' +
|
|
3358
|
+
'Use this to bootstrap a new brain with battle-tested community knowledge before your first session_start. ' +
|
|
3359
|
+
'Use publish_lesson to contribute your own lessons to the Public Brain; ' +
|
|
3360
|
+
'use learn_from_attempts for storing lessons from your own sessions.',
|
|
3330
3361
|
inputSchema: {
|
|
3331
3362
|
type: 'object',
|
|
3332
3363
|
properties: {
|
|
@@ -3531,12 +3562,16 @@ const TOOLS = [
|
|
|
3531
3562
|
},
|
|
3532
3563
|
{
|
|
3533
3564
|
name: 'causal_trace',
|
|
3534
|
-
description: 'Root Cause Analysis through memory
|
|
3535
|
-
'
|
|
3536
|
-
'
|
|
3565
|
+
description: 'Root Cause Analysis through memory: given a problem description, traces the causal chain ' +
|
|
3566
|
+
'from root cause through intermediate failures to the current symptom, then surfaces the ' +
|
|
3567
|
+
'exact solution that worked before. Read-only — does not modify any stored data. ' +
|
|
3568
|
+
'Requires prior learning: brain must have lessons stored via learn_from_attempts or brain_from_git. ' +
|
|
3569
|
+
'Returns an ordered chain of concepts with confidence scores plus the matching solution; ' +
|
|
3570
|
+
'returns an empty chain with a message if no causal path is found. ' +
|
|
3537
3571
|
'Example: causal_trace(problem="auth breaks after restart") → ' +
|
|
3538
|
-
'"Root: k8s:namespace-terminating → keycloak:jwks-race → Solution
|
|
3539
|
-
'
|
|
3572
|
+
'"Root: k8s:namespace-terminating → keycloak:jwks-race → Solution: PollUntilContextTimeout 3min". ' +
|
|
3573
|
+
'Use recall_best_solution for direct topic lookup, syndicate_search for community patterns, ' +
|
|
3574
|
+
'and causal_trace when you have a symptom and need the full root-cause chain.',
|
|
3540
3575
|
inputSchema: {
|
|
3541
3576
|
type: 'object',
|
|
3542
3577
|
properties: {
|
|
@@ -3567,12 +3602,16 @@ const TOOLS = [
|
|
|
3567
3602
|
},
|
|
3568
3603
|
{
|
|
3569
3604
|
name: 'autopilot',
|
|
3570
|
-
description: '
|
|
3571
|
-
'
|
|
3572
|
-
'
|
|
3573
|
-
'
|
|
3574
|
-
'
|
|
3575
|
-
'
|
|
3605
|
+
description: 'Generate a CLAUDE.md / copilot-instructions.md that makes any AI self-managing forever. ' +
|
|
3606
|
+
'Writes a configuration file to disk — will overwrite an existing file at the target path. ' +
|
|
3607
|
+
'No auth required beyond a valid instance_id. ' +
|
|
3608
|
+
'The generated file instructs Claude, Cursor, Copilot, Windsurf, or Gemini to automatically ' +
|
|
3609
|
+
'call session_start at window open, learn_from_attempts after every fix, and session_end ' +
|
|
3610
|
+
'before closing — without being asked. ' +
|
|
3611
|
+
'Returns the generated file content as a string and the path where it was written. ' +
|
|
3612
|
+
'Use style="minimal" for just the three hooks; style="full" for the complete ruleset with examples. ' +
|
|
3613
|
+
'One command. Every AI. Always on. ' +
|
|
3614
|
+
'Use setup_ai_memory instead if you want an interactive one-shot setup that also creates an instance.',
|
|
3576
3615
|
inputSchema: {
|
|
3577
3616
|
type: 'object',
|
|
3578
3617
|
properties: {
|