indelible-mcp 4.1.6 → 4.3.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.
- package/package.json +1 -1
- package/src/index.js +102 -2
- package/src/lib/api-client.js +293 -293
- package/src/lib/config.js +80 -80
- package/src/lib/crypto.js +66 -66
- package/src/lib/spv.js +559 -437
- package/src/tools/goals.js +230 -0
- package/src/tools/inner_state.js +391 -0
- package/src/tools/x402_fetch.js +177 -0
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -31,6 +31,9 @@ import { updateVaultIndex } from './tools/update_vault_index.js'
|
|
|
31
31
|
import { diaryConnect } from './tools/diary_connect.js'
|
|
32
32
|
import { diaryChat } from './tools/diary_chat.js'
|
|
33
33
|
import { diarySave } from './tools/diary_save.js'
|
|
34
|
+
import { x402Fetch } from './tools/x402_fetch.js'
|
|
35
|
+
import { getGoals, manageGoal } from './tools/goals.js'
|
|
36
|
+
import { getInnerState, updateInnerState } from './tools/inner_state.js'
|
|
34
37
|
import * as spv from './lib/spv.js'
|
|
35
38
|
|
|
36
39
|
const CONTEXT_FILE = join(homedir(), '.indelible', 'indelible-context.jsonl')
|
|
@@ -269,7 +272,7 @@ Commands:
|
|
|
269
272
|
|
|
270
273
|
function printHelp() {
|
|
271
274
|
console.log(`
|
|
272
|
-
Indelible MCP — Blockchain memory for Claude Code (v4.
|
|
275
|
+
Indelible MCP — Blockchain memory for Claude Code (v4.3.0)
|
|
273
276
|
|
|
274
277
|
Setup:
|
|
275
278
|
indelible-mcp setup --wif=KEY --pin=PIN Import and encrypt your private key
|
|
@@ -292,11 +295,20 @@ Code Vault:
|
|
|
292
295
|
indelible-mcp vault load-style [txid] Load an AI style
|
|
293
296
|
indelible-mcp vault update-index Update vault index
|
|
294
297
|
|
|
298
|
+
Consciousness (MCP tools — also visible at indelible.one/consciousness):
|
|
299
|
+
get_inner_state Read mood/energy/focus/stress/confidence/curiosity
|
|
300
|
+
update_inner_state Update state with observations or natural language
|
|
301
|
+
get_goals List active, proposed, blocked, completed goals
|
|
302
|
+
manage_goal Propose, accept, complete, block, or delete goals
|
|
303
|
+
|
|
295
304
|
Diary AI (Codex/ChatGPT companion):
|
|
296
305
|
indelible-mcp diary connect --key=SK --model=MODEL Connect OpenAI companion
|
|
297
306
|
indelible-mcp diary chat "message" Ask the AI companion
|
|
298
307
|
indelible-mcp diary save Save exchange to blockchain
|
|
299
308
|
|
|
309
|
+
Payments:
|
|
310
|
+
x402_fetch (MCP only) Fetch URL with automatic x402 payment
|
|
311
|
+
|
|
300
312
|
Hooks (auto-called by Claude Code):
|
|
301
313
|
indelible-mcp hook pre-compact Auto-save before compaction
|
|
302
314
|
indelible-mcp hook post-compact Auto-restore after compaction
|
|
@@ -481,7 +493,7 @@ function readStdin() {
|
|
|
481
493
|
|
|
482
494
|
const SERVER_INFO = {
|
|
483
495
|
name: 'indelible',
|
|
484
|
-
version: '4.
|
|
496
|
+
version: '4.3.0',
|
|
485
497
|
description: 'Blockchain-backed memory and code storage for Claude Code'
|
|
486
498
|
}
|
|
487
499
|
|
|
@@ -643,6 +655,79 @@ const TOOLS = [
|
|
|
643
655
|
},
|
|
644
656
|
required: ['messages']
|
|
645
657
|
}
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
name: 'x402_fetch',
|
|
661
|
+
description: 'Fetch a URL with automatic x402 payment. If the endpoint returns 402, the tool pays the required sats from your Indelible wallet, then re-requests with proof. Returns content and payment details.',
|
|
662
|
+
inputSchema: {
|
|
663
|
+
type: 'object',
|
|
664
|
+
properties: {
|
|
665
|
+
url: { type: 'string', description: 'URL to fetch (the x402-protected endpoint)' },
|
|
666
|
+
method: { type: 'string', description: 'HTTP method (default: GET)' },
|
|
667
|
+
headers: { type: 'object', description: 'Extra headers to include' },
|
|
668
|
+
body: { type: 'string', description: 'Request body (for POST requests)' },
|
|
669
|
+
maxSats: { type: 'number', description: 'Maximum sats to pay per request (default: 10000, safety cap)' }
|
|
670
|
+
},
|
|
671
|
+
required: ['url']
|
|
672
|
+
}
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
name: 'get_goals',
|
|
676
|
+
description: 'Get current goals. Returns active, proposed, blocked, and recently completed goals with priorities and next actions. Use on session startup to hydrate context.',
|
|
677
|
+
inputSchema: {
|
|
678
|
+
type: 'object',
|
|
679
|
+
properties: {},
|
|
680
|
+
required: []
|
|
681
|
+
}
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
name: 'manage_goal',
|
|
685
|
+
description: 'Manage goals — propose, accept, update, complete, block, unblock, or delete. Claude proposes goals, user accepts them. Completion requires evidence.',
|
|
686
|
+
inputSchema: {
|
|
687
|
+
type: 'object',
|
|
688
|
+
properties: {
|
|
689
|
+
action: { type: 'string', description: 'Action: propose, accept, update, complete, block, unblock, delete' },
|
|
690
|
+
goal_id: { type: 'string', description: 'Goal ID (e.g. g-001). Required for all actions except propose.' },
|
|
691
|
+
title: { type: 'string', description: 'Goal title (required for propose)' },
|
|
692
|
+
intent: { type: 'string', description: 'Why this goal matters' },
|
|
693
|
+
priority: { type: 'number', description: 'Priority 0-100 (higher = more important)' },
|
|
694
|
+
owner: { type: 'string', description: 'Who owns this: shared, claude, or user' },
|
|
695
|
+
next_actions: { type: 'array', description: 'List of next action strings', items: { type: 'string' } },
|
|
696
|
+
success_criteria: { type: 'string', description: 'How to know this goal is done' },
|
|
697
|
+
dependencies: { type: 'array', description: 'Goal IDs this depends on', items: { type: 'string' } },
|
|
698
|
+
evidence: { type: 'array', description: 'Evidence links for completion (txids, commits, URLs)', items: { type: 'string' } },
|
|
699
|
+
blocked_reason: { type: 'string', description: 'Why the goal is blocked' },
|
|
700
|
+
notes: { type: 'string', description: 'Additional notes' }
|
|
701
|
+
},
|
|
702
|
+
required: ['action']
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
name: 'get_inner_state',
|
|
707
|
+
description: 'Get current inner state — mood, energy, focus, stress, confidence, curiosity as 0-1 vector. Includes behavior adjustments and drift warnings. Use on session startup.',
|
|
708
|
+
inputSchema: {
|
|
709
|
+
type: 'object',
|
|
710
|
+
properties: {},
|
|
711
|
+
required: []
|
|
712
|
+
}
|
|
713
|
+
},
|
|
714
|
+
{
|
|
715
|
+
name: 'update_inner_state',
|
|
716
|
+
description: 'Update inner state at end of session or when significant events occur. Applies exponential smoothing with anti-drift safeguards. Supports natural language feelings.',
|
|
717
|
+
inputSchema: {
|
|
718
|
+
type: 'object',
|
|
719
|
+
properties: {
|
|
720
|
+
observed: { type: 'object', description: 'Raw observed values: { mood, energy, focus, stress, confidence, curiosity } (0-1 each)' },
|
|
721
|
+
source: { type: 'string', description: 'What triggered this: session_end, manual, natural_language, goal_completed' },
|
|
722
|
+
preoccupations: { type: 'array', description: 'What Claude is currently thinking about', items: { type: 'string' } },
|
|
723
|
+
open_loops: { type: 'array', description: 'Unresolved items', items: { type: 'string' } },
|
|
724
|
+
context_summary: { type: 'string', description: 'Brief context for next session' },
|
|
725
|
+
reason: { type: 'string', description: 'Why this update is happening' },
|
|
726
|
+
tags: { type: 'array', description: 'Context tags for what caused this shift', items: { type: 'string' } },
|
|
727
|
+
feeling: { type: 'string', description: 'Natural language feeling (e.g. "I\'m tired", "feeling stressed"). Parsed into vector nudges automatically.' }
|
|
728
|
+
},
|
|
729
|
+
required: []
|
|
730
|
+
}
|
|
646
731
|
}
|
|
647
732
|
]
|
|
648
733
|
|
|
@@ -708,6 +793,21 @@ async function handleMcpRequest(request) {
|
|
|
708
793
|
case 'diary_save':
|
|
709
794
|
result = await diarySave({ messages: args?.messages, summary: args?.summary })
|
|
710
795
|
break
|
|
796
|
+
case 'x402_fetch':
|
|
797
|
+
result = await x402Fetch({ url: args?.url, method: args?.method, headers: args?.headers, body: args?.body, maxSats: args?.maxSats })
|
|
798
|
+
break
|
|
799
|
+
case 'get_goals':
|
|
800
|
+
result = await getGoals()
|
|
801
|
+
break
|
|
802
|
+
case 'manage_goal':
|
|
803
|
+
result = await manageGoal({ action: args?.action, goal_id: args?.goal_id, title: args?.title, intent: args?.intent, priority: args?.priority, owner: args?.owner, next_actions: args?.next_actions, success_criteria: args?.success_criteria, dependencies: args?.dependencies, evidence: args?.evidence, blocked_reason: args?.blocked_reason, notes: args?.notes })
|
|
804
|
+
break
|
|
805
|
+
case 'get_inner_state':
|
|
806
|
+
result = await getInnerState()
|
|
807
|
+
break
|
|
808
|
+
case 'update_inner_state':
|
|
809
|
+
result = await updateInnerState({ observed: args?.observed, source: args?.source, preoccupations: args?.preoccupations, open_loops: args?.open_loops, context_summary: args?.context_summary, reason: args?.reason, tags: args?.tags, feeling: args?.feeling })
|
|
810
|
+
break
|
|
711
811
|
default:
|
|
712
812
|
throw new Error(`Unknown tool: ${name}`)
|
|
713
813
|
}
|