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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "indelible-mcp",
3
- "version": "4.1.6",
3
+ "version": "4.3.0",
4
4
  "description": "Blockchain-backed memory and code storage for Claude Code. Save AI conversations and source code permanently on BSV.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
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.1.6)
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.1.6',
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
  }