lotus-wisdom-mcp 0.1.1 → 0.1.2
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 +138 -4
- package/dist/bundle.js +206 -92
- package/dist/index.js +232 -84
- package/package.json +2 -1
- package/dist/cli.js +0 -3
package/README.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
# Lotus Wisdom MCP Server
|
|
1
|
+
# 🪷 Lotus Wisdom MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="assets/lotus-flower.png" alt="Lotus Flower" width="400"/>
|
|
5
|
+
</p>
|
|
4
6
|
|
|
7
|
+
An MCP server implementation that provides a tool for problem-solving using the Lotus Sutra's wisdom framework, combining analytical thinking with intuitive wisdom.
|
|
5
8
|
## Features
|
|
6
9
|
|
|
7
10
|
* Multi-faceted problem-solving approach inspired by the Lotus Sutra
|
|
@@ -16,6 +19,40 @@ This MCP server was developed from the [Lotus OS prompt](https://github.com/linx
|
|
|
16
19
|
|
|
17
20
|
Note: The original prompt framework may work less effectively with newer Claude models, but this MCP server implementation provides consistent functionality across model versions.
|
|
18
21
|
|
|
22
|
+
## Implementation Details
|
|
23
|
+
|
|
24
|
+
The server implements a structured thinking process using the following components:
|
|
25
|
+
|
|
26
|
+
### Tag Types
|
|
27
|
+
|
|
28
|
+
The server organizes thoughts using various tag categories (all valid values for the `tag` input parameter):
|
|
29
|
+
|
|
30
|
+
* **Skillful Means**: upaya, expedient, direct, gradual, sudden
|
|
31
|
+
* **Non-Dual Recognition**: recognize, transform, integrate, transcend, embody
|
|
32
|
+
* **Meta-Cognitive Awareness**: examine, reflect, verify, refine, complete
|
|
33
|
+
* **Process Steps**: open, engage, transform, express, meditate
|
|
34
|
+
* **Final Output**: OUTPUT
|
|
35
|
+
|
|
36
|
+
### Thought Visualization
|
|
37
|
+
|
|
38
|
+
Each thought is beautifully formatted with:
|
|
39
|
+
|
|
40
|
+
* Colorful output using the chalk library
|
|
41
|
+
* Tag-specific symbols (e.g., 🔆 for skillful means, ☯️ for non-dual recognition)
|
|
42
|
+
* Box-drawing characters to create clear thought boundaries
|
|
43
|
+
* Special meditation formatting with pause indicators
|
|
44
|
+
* Final output with double-line borders for emphasis
|
|
45
|
+
|
|
46
|
+
Note: The visualization appears in the server console output, helping developers track the thinking process.
|
|
47
|
+
|
|
48
|
+
### Process Flow
|
|
49
|
+
|
|
50
|
+
1. The user submits a problem to solve
|
|
51
|
+
2. The model works through a sequence of thoughts using different tags
|
|
52
|
+
3. Each thought builds on previous ones and may revise understanding
|
|
53
|
+
4. Meditation pauses can be included for clarity
|
|
54
|
+
5. The process concludes with a final OUTPUT thought
|
|
55
|
+
|
|
19
56
|
## Tool
|
|
20
57
|
|
|
21
58
|
### lotuswisdom
|
|
@@ -24,7 +61,7 @@ A tool for problem-solving using the Lotus Sutra's wisdom framework, with variou
|
|
|
24
61
|
|
|
25
62
|
**Inputs:**
|
|
26
63
|
|
|
27
|
-
* `tag` (string): The current processing technique (must be one of the core tags)
|
|
64
|
+
* `tag` (string): The current processing technique (must be one of the core tags listed above)
|
|
28
65
|
* `content` (string): The content of the current processing step
|
|
29
66
|
* `stepNumber` (integer): Current number in sequence
|
|
30
67
|
* `totalSteps` (integer): Estimated total steps needed
|
|
@@ -43,6 +80,72 @@ The Lotus Wisdom tool is designed for:
|
|
|
43
80
|
* Tasks that benefit from meditative pauses to allow insight
|
|
44
81
|
* Questions containing their own inherent wisdom
|
|
45
82
|
|
|
83
|
+
## Example Usage
|
|
84
|
+
|
|
85
|
+
Here's how a conversation with Claude might flow when using the Lotus Wisdom MCP server:
|
|
86
|
+
|
|
87
|
+
**User**: "Help me understand the relationship between freedom and responsibility."
|
|
88
|
+
|
|
89
|
+
**Claude** would then use the lotuswisdom tool through multiple steps:
|
|
90
|
+
|
|
91
|
+
1. First, establish an opening thought:
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"tag": "open",
|
|
95
|
+
"content": "The question explores the relationship between freedom and responsibility, which contain an apparent tension but also deep connection.",
|
|
96
|
+
"stepNumber": 1,
|
|
97
|
+
"totalSteps": 5,
|
|
98
|
+
"nextStepNeeded": true
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
2. Then engage with different perspectives:
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"tag": "direct",
|
|
106
|
+
"content": "Freedom and responsibility are two sides of the same coin. True freedom isn't absence of constraints but the capacity to choose our response within constraints.",
|
|
107
|
+
"stepNumber": 2,
|
|
108
|
+
"totalSteps": 5,
|
|
109
|
+
"nextStepNeeded": true
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
3. Perhaps take a meditation pause:
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"tag": "meditate",
|
|
117
|
+
"content": "Contemplating how freedom without responsibility becomes chaos, and responsibility without freedom becomes oppression.",
|
|
118
|
+
"stepNumber": 3,
|
|
119
|
+
"totalSteps": 5,
|
|
120
|
+
"nextStepNeeded": true,
|
|
121
|
+
"isMeditation": true
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
4. Integrate the understanding:
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"tag": "integrate",
|
|
129
|
+
"content": "Freedom and responsibility mutually enable each other. Our freedom to choose gives rise to our responsibility for what we choose, and our willingness to take responsibility expands our freedom.",
|
|
130
|
+
"stepNumber": 4,
|
|
131
|
+
"totalSteps": 5,
|
|
132
|
+
"nextStepNeeded": true
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
5. Provide a final output:
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"tag": "OUTPUT",
|
|
140
|
+
"content": "Freedom and responsibility exist in dynamic balance. Freedom is the power to choose, while responsibility is accountability for those choices. They're not opposing forces but complementary aspects of human agency. Without freedom, responsibility would be mere obligation. Without responsibility, freedom would degrade into impulsivity. The most fulfilled lives embrace both: using freedom to make meaningful choices while taking responsibility for their consequences.",
|
|
141
|
+
"stepNumber": 5,
|
|
142
|
+
"totalSteps": 5,
|
|
143
|
+
"nextStepNeeded": false
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The result would be a thoughtful, multi-perspective response to the question that shows the process of arriving at wisdom rather than just stating conclusions.
|
|
148
|
+
|
|
46
149
|
## Configuration
|
|
47
150
|
|
|
48
151
|
### Usage with Claude Desktop
|
|
@@ -109,4 +212,35 @@ docker build -t lotus-wisdom-mcp -f Dockerfile .
|
|
|
109
212
|
|
|
110
213
|
## License
|
|
111
214
|
|
|
112
|
-
This MCP server is licensed under the MIT License. For more details, please see the LICENSE file in the project repository.
|
|
215
|
+
This MCP server is licensed under the MIT License. For more details, please see the LICENSE file in the project repository.
|
|
216
|
+
|
|
217
|
+
## Connect from Claude Desktop
|
|
218
|
+
|
|
219
|
+
Since Claude Desktop doesn't yet have native support for remote MCP servers with authentication, you'll need to use the `mcp-remote` proxy:
|
|
220
|
+
|
|
221
|
+
1. Update your Claude Desktop configuration file:
|
|
222
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
223
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
224
|
+
|
|
225
|
+
2. Add the following configuration:
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{
|
|
229
|
+
"mcpServers": {
|
|
230
|
+
"lotus-wisdom": {
|
|
231
|
+
"command": "npx",
|
|
232
|
+
"args": ["mcp-remote", "https://lotus-wisdom-mcp.linxule.workers.dev/sse"]
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
3. Restart Claude Desktop (Cmd/Ctrl + R)
|
|
239
|
+
|
|
240
|
+
4. When Claude restarts, a browser window will open for OAuth authentication. Complete the authorization flow to grant Claude access to the MCP server.
|
|
241
|
+
|
|
242
|
+
5. Once authenticated, you'll see the Lotus Wisdom tools available in Claude's tool menu (bottom right corner).
|
|
243
|
+
|
|
244
|
+
## Available Tools
|
|
245
|
+
|
|
246
|
+
// ... existing code ...
|
package/dist/bundle.js
CHANGED
|
@@ -3933,14 +3933,14 @@ var ostring = () => stringType().optional();
|
|
|
3933
3933
|
var onumber = () => numberType().optional();
|
|
3934
3934
|
var oboolean = () => booleanType().optional();
|
|
3935
3935
|
var coerce = {
|
|
3936
|
-
string: (arg) => ZodString.create({ ...arg, coerce: true }),
|
|
3937
|
-
number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
|
|
3938
|
-
boolean: (arg) => ZodBoolean.create({
|
|
3936
|
+
string: ((arg) => ZodString.create({ ...arg, coerce: true })),
|
|
3937
|
+
number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),
|
|
3938
|
+
boolean: ((arg) => ZodBoolean.create({
|
|
3939
3939
|
...arg,
|
|
3940
3940
|
coerce: true
|
|
3941
|
-
}),
|
|
3942
|
-
bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
|
|
3943
|
-
date: (arg) => ZodDate.create({ ...arg, coerce: true })
|
|
3941
|
+
})),
|
|
3942
|
+
bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),
|
|
3943
|
+
date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
|
|
3944
3944
|
};
|
|
3945
3945
|
var NEVER = INVALID;
|
|
3946
3946
|
var z = /* @__PURE__ */ Object.freeze({
|
|
@@ -5856,37 +5856,34 @@ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
|
|
5856
5856
|
var source_default = chalk;
|
|
5857
5857
|
|
|
5858
5858
|
// index.ts
|
|
5859
|
-
var
|
|
5860
|
-
|
|
5861
|
-
"
|
|
5862
|
-
"
|
|
5863
|
-
"
|
|
5864
|
-
"
|
|
5865
|
-
|
|
5866
|
-
|
|
5867
|
-
|
|
5868
|
-
|
|
5869
|
-
|
|
5870
|
-
|
|
5871
|
-
|
|
5872
|
-
|
|
5873
|
-
"
|
|
5874
|
-
|
|
5875
|
-
"verify",
|
|
5876
|
-
"refine",
|
|
5877
|
-
"complete",
|
|
5878
|
-
// Process Steps
|
|
5879
|
-
"open",
|
|
5880
|
-
"engage",
|
|
5881
|
-
"transform",
|
|
5882
|
-
"express",
|
|
5883
|
-
"meditate",
|
|
5884
|
-
// Output
|
|
5885
|
-
"OUTPUT"
|
|
5886
|
-
];
|
|
5859
|
+
var WISDOM_DOMAINS = {
|
|
5860
|
+
"skillful_means": ["upaya", "expedient", "direct", "gradual", "sudden"],
|
|
5861
|
+
"non_dual_recognition": ["recognize", "transform", "integrate", "transcend", "embody"],
|
|
5862
|
+
"meta_cognitive": ["examine", "reflect", "verify", "refine", "complete"],
|
|
5863
|
+
"process_flow": ["open", "engage", "express"],
|
|
5864
|
+
"meditation": ["meditate"]
|
|
5865
|
+
};
|
|
5866
|
+
var CORE_TAGS = Object.values(WISDOM_DOMAINS).flat();
|
|
5867
|
+
function getWisdomDomain(tag) {
|
|
5868
|
+
for (const [domain, tags] of Object.entries(WISDOM_DOMAINS)) {
|
|
5869
|
+
if (tags.includes(tag)) {
|
|
5870
|
+
return domain;
|
|
5871
|
+
}
|
|
5872
|
+
}
|
|
5873
|
+
return "unknown";
|
|
5874
|
+
}
|
|
5887
5875
|
var LotusWisdomServer = class {
|
|
5888
5876
|
thoughtProcess = [];
|
|
5889
|
-
|
|
5877
|
+
debugMode = process.env.LOTUS_DEBUG === "true";
|
|
5878
|
+
// Reset for new inquiry
|
|
5879
|
+
resetProcess() {
|
|
5880
|
+
this.thoughtProcess = [];
|
|
5881
|
+
}
|
|
5882
|
+
log(message) {
|
|
5883
|
+
if (this.debugMode) {
|
|
5884
|
+
console.error(message);
|
|
5885
|
+
}
|
|
5886
|
+
}
|
|
5890
5887
|
validateThoughtData(input) {
|
|
5891
5888
|
const data = input;
|
|
5892
5889
|
if (!data.tag || typeof data.tag !== "string") {
|
|
@@ -5907,8 +5904,8 @@ var LotusWisdomServer = class {
|
|
|
5907
5904
|
if (typeof data.nextStepNeeded !== "boolean") {
|
|
5908
5905
|
throw new Error("Invalid nextStepNeeded: must be a boolean");
|
|
5909
5906
|
}
|
|
5910
|
-
if (data.tag === "
|
|
5911
|
-
this.
|
|
5907
|
+
if (data.stepNumber === 1 && data.tag === "open") {
|
|
5908
|
+
this.resetProcess();
|
|
5912
5909
|
}
|
|
5913
5910
|
return {
|
|
5914
5911
|
tag: data.tag,
|
|
@@ -5917,39 +5914,41 @@ var LotusWisdomServer = class {
|
|
|
5917
5914
|
totalSteps: data.totalSteps,
|
|
5918
5915
|
nextStepNeeded: data.nextStepNeeded,
|
|
5919
5916
|
isMeditation: data.isMeditation,
|
|
5920
|
-
meditationDuration: data.meditationDuration
|
|
5917
|
+
meditationDuration: data.meditationDuration,
|
|
5918
|
+
wisdomDomain: getWisdomDomain(data.tag)
|
|
5921
5919
|
};
|
|
5922
5920
|
}
|
|
5923
5921
|
formatThought(thoughtData) {
|
|
5924
|
-
const { tag, stepNumber, totalSteps, content, isMeditation } = thoughtData;
|
|
5922
|
+
const { tag, stepNumber, totalSteps, content, isMeditation, wisdomDomain } = thoughtData;
|
|
5925
5923
|
let tagColor;
|
|
5926
5924
|
let tagSymbol;
|
|
5927
|
-
|
|
5925
|
+
let domainLabel = "";
|
|
5926
|
+
if (wisdomDomain === "skillful_means") {
|
|
5928
5927
|
tagColor = source_default.yellow;
|
|
5929
5928
|
tagSymbol = "\u{1F506}";
|
|
5930
|
-
|
|
5929
|
+
domainLabel = "SKILLFUL MEANS";
|
|
5930
|
+
} else if (wisdomDomain === "non_dual_recognition") {
|
|
5931
5931
|
tagColor = source_default.green;
|
|
5932
5932
|
tagSymbol = "\u262F\uFE0F";
|
|
5933
|
-
|
|
5933
|
+
domainLabel = "NON-DUAL";
|
|
5934
|
+
} else if (wisdomDomain === "meta_cognitive") {
|
|
5934
5935
|
tagColor = source_default.blue;
|
|
5935
5936
|
tagSymbol = "\u{1F9E0}";
|
|
5936
|
-
|
|
5937
|
+
domainLabel = "META-COGNITIVE";
|
|
5938
|
+
} else if (wisdomDomain === "process_flow") {
|
|
5937
5939
|
tagColor = source_default.magenta;
|
|
5938
5940
|
tagSymbol = "\u{1F30A}";
|
|
5939
|
-
|
|
5941
|
+
domainLabel = "PROCESS";
|
|
5942
|
+
} else if (wisdomDomain === "meditation") {
|
|
5940
5943
|
tagColor = source_default.cyan;
|
|
5941
5944
|
tagSymbol = "\u{1F9D8}";
|
|
5942
|
-
|
|
5943
|
-
tagColor = source_default.white.bold;
|
|
5944
|
-
tagSymbol = "\u{1F338}";
|
|
5945
|
-
} else if (tag === "transform") {
|
|
5946
|
-
tagColor = source_default.green;
|
|
5947
|
-
tagSymbol = "\u{1F504}";
|
|
5945
|
+
domainLabel = "MEDITATION";
|
|
5948
5946
|
} else {
|
|
5949
5947
|
tagColor = source_default.white;
|
|
5950
5948
|
tagSymbol = "\u{1F4AD}";
|
|
5949
|
+
domainLabel = "UNKNOWN";
|
|
5951
5950
|
}
|
|
5952
|
-
const header = `${tagSymbol}
|
|
5951
|
+
const header = `${tagSymbol} [${domainLabel}: ${tag.toUpperCase()}] Step ${stepNumber}/${totalSteps}`;
|
|
5953
5952
|
const formattedHeader = tagColor(header);
|
|
5954
5953
|
let formattedContent;
|
|
5955
5954
|
if (isMeditation) {
|
|
@@ -5961,16 +5960,6 @@ var LotusWisdomServer = class {
|
|
|
5961
5960
|
} else {
|
|
5962
5961
|
formattedContent = content;
|
|
5963
5962
|
}
|
|
5964
|
-
if (tag === "OUTPUT") {
|
|
5965
|
-
const border2 = "\u2550".repeat(Math.max(header.length, content.length) + 4);
|
|
5966
|
-
return `
|
|
5967
|
-
\u2554${border2}\u2557
|
|
5968
|
-
\u2551 ${formattedHeader} \u2551
|
|
5969
|
-
\u2560${border2}\u2563
|
|
5970
|
-
\u2551 ${content.padEnd(border2.length - 2)} \u2551
|
|
5971
|
-
\u255A${border2}\u255D
|
|
5972
|
-
<<<END>>>`;
|
|
5973
|
-
}
|
|
5974
5963
|
const border = "\u2500".repeat(Math.max(header.length, content.length) + 4);
|
|
5975
5964
|
return `
|
|
5976
5965
|
\u250C${border}\u2510
|
|
@@ -5986,19 +5975,78 @@ var LotusWisdomServer = class {
|
|
|
5986
5975
|
validatedInput.totalSteps = validatedInput.stepNumber;
|
|
5987
5976
|
}
|
|
5988
5977
|
this.thoughtProcess.push(validatedInput);
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5978
|
+
this.log(this.formatThought(validatedInput));
|
|
5979
|
+
if (validatedInput.tag === "meditate") {
|
|
5980
|
+
const journeyResonance2 = this.thoughtProcess.map((step) => step.tag).join(" \u2192 ");
|
|
5981
|
+
return {
|
|
5982
|
+
content: [{
|
|
5983
|
+
type: "text",
|
|
5984
|
+
text: JSON.stringify({
|
|
5985
|
+
status: "MEDITATION_COMPLETE",
|
|
5986
|
+
duration: validatedInput.meditationDuration || 3,
|
|
5987
|
+
prompt: "What insights emerged during the pause?",
|
|
5988
|
+
instruction: "Continue with what arose from stillness",
|
|
5989
|
+
stepNumber: validatedInput.stepNumber,
|
|
5990
|
+
totalSteps: validatedInput.totalSteps,
|
|
5991
|
+
journey: journeyResonance2
|
|
5992
|
+
}, null, 2)
|
|
5993
|
+
}]
|
|
5994
|
+
};
|
|
5995
|
+
}
|
|
5996
|
+
if (validatedInput.tag === "express" && !validatedInput.nextStepNeeded) {
|
|
5997
|
+
const finalJourney = this.thoughtProcess.map((step) => step.tag).join(" \u2192 ");
|
|
5998
|
+
const finalDomainJourney = this.thoughtProcess.map((step) => step.wisdomDomain).filter((domain, index, array) => index === 0 || domain !== array[index - 1]).join(" \u2192 ");
|
|
5999
|
+
return {
|
|
6000
|
+
content: [{
|
|
6001
|
+
type: "text",
|
|
6002
|
+
text: JSON.stringify({
|
|
6003
|
+
status: "WISDOM_READY",
|
|
6004
|
+
processComplete: true,
|
|
6005
|
+
finalStep: validatedInput.tag,
|
|
6006
|
+
instruction: "NOW_SPEAK_THE_WISDOM_NATURALLY",
|
|
6007
|
+
totalSteps: validatedInput.stepNumber,
|
|
6008
|
+
journeyLength: this.thoughtProcess.length,
|
|
6009
|
+
finalJourney,
|
|
6010
|
+
domainJourney: finalDomainJourney
|
|
6011
|
+
}, null, 2)
|
|
6012
|
+
}]
|
|
6013
|
+
};
|
|
6014
|
+
}
|
|
6015
|
+
if (validatedInput.tag === "complete" && !validatedInput.nextStepNeeded) {
|
|
6016
|
+
const finalJourney = this.thoughtProcess.map((step) => step.tag).join(" \u2192 ");
|
|
6017
|
+
const finalDomainJourney = this.thoughtProcess.map((step) => step.wisdomDomain).filter((domain, index, array) => index === 0 || domain !== array[index - 1]).join(" \u2192 ");
|
|
6018
|
+
return {
|
|
6019
|
+
content: [{
|
|
6020
|
+
type: "text",
|
|
6021
|
+
text: JSON.stringify({
|
|
6022
|
+
status: "WISDOM_READY",
|
|
6023
|
+
processComplete: true,
|
|
6024
|
+
finalStep: validatedInput.tag,
|
|
6025
|
+
instruction: "PROCESS_COMPLETE_SPEAK_WISDOM",
|
|
6026
|
+
totalSteps: validatedInput.stepNumber,
|
|
6027
|
+
journeyLength: this.thoughtProcess.length,
|
|
6028
|
+
finalJourney,
|
|
6029
|
+
domainJourney: finalDomainJourney
|
|
6030
|
+
}, null, 2)
|
|
6031
|
+
}]
|
|
6032
|
+
};
|
|
6033
|
+
}
|
|
6034
|
+
const journeyResonance = this.thoughtProcess.map((step) => step.tag).join(" \u2192 ");
|
|
6035
|
+
const domainJourney = this.thoughtProcess.map((step) => step.wisdomDomain).filter((domain, index, array) => index === 0 || domain !== array[index - 1]).join(" \u2192 ");
|
|
6036
|
+
const currentDomain = getWisdomDomain(validatedInput.tag);
|
|
5992
6037
|
return {
|
|
5993
6038
|
content: [{
|
|
5994
6039
|
type: "text",
|
|
5995
6040
|
text: JSON.stringify({
|
|
6041
|
+
status: "processing",
|
|
6042
|
+
currentStep: validatedInput.tag,
|
|
6043
|
+
wisdomDomain: currentDomain,
|
|
6044
|
+
journey: journeyResonance,
|
|
6045
|
+
domainJourney,
|
|
5996
6046
|
stepNumber: validatedInput.stepNumber,
|
|
5997
6047
|
totalSteps: validatedInput.totalSteps,
|
|
5998
6048
|
nextStepNeeded: validatedInput.nextStepNeeded,
|
|
5999
|
-
|
|
6000
|
-
processLength: this.thoughtProcess.length,
|
|
6001
|
-
finalOutput: includeOutput ? this.finalOutput : void 0
|
|
6049
|
+
processLength: this.thoughtProcess.length
|
|
6002
6050
|
}, null, 2)
|
|
6003
6051
|
}]
|
|
6004
6052
|
};
|
|
@@ -6015,12 +6063,37 @@ var LotusWisdomServer = class {
|
|
|
6015
6063
|
};
|
|
6016
6064
|
}
|
|
6017
6065
|
}
|
|
6066
|
+
// Optional: Method to get current journey summary with domain awareness
|
|
6067
|
+
getJourneySummary() {
|
|
6068
|
+
const domainJourney = this.thoughtProcess.map((step) => step.wisdomDomain).filter((domain, index, array) => index === 0 || domain !== array[index - 1]).join(" \u2192 ");
|
|
6069
|
+
return {
|
|
6070
|
+
content: [{
|
|
6071
|
+
type: "text",
|
|
6072
|
+
text: JSON.stringify({
|
|
6073
|
+
journeyLength: this.thoughtProcess.length,
|
|
6074
|
+
domainJourney,
|
|
6075
|
+
steps: this.thoughtProcess.map((step) => ({
|
|
6076
|
+
tag: step.tag,
|
|
6077
|
+
domain: step.wisdomDomain,
|
|
6078
|
+
stepNumber: step.stepNumber,
|
|
6079
|
+
brief: step.content.substring(0, 50) + "..."
|
|
6080
|
+
}))
|
|
6081
|
+
}, null, 2)
|
|
6082
|
+
}]
|
|
6083
|
+
};
|
|
6084
|
+
}
|
|
6018
6085
|
};
|
|
6019
6086
|
var LOTUS_WISDOM_TOOL = {
|
|
6020
6087
|
name: "lotuswisdom",
|
|
6021
6088
|
description: `A tool for problem-solving using the Lotus Sutra's wisdom framework.
|
|
6022
|
-
This tool
|
|
6023
|
-
|
|
6089
|
+
This tool facilitates the contemplative process but does NOT generate the final output.
|
|
6090
|
+
|
|
6091
|
+
**CRITICAL WORKFLOW:**
|
|
6092
|
+
1. Use this tool to process through the wisdom journey
|
|
6093
|
+
2. The tool tracks both your tag path and wisdom domain movements
|
|
6094
|
+
3. When you receive status='WISDOM_READY', the tool's work is COMPLETE
|
|
6095
|
+
4. YOU then craft and speak the final wisdom naturally in your own voice
|
|
6096
|
+
5. The tool processes; you express
|
|
6024
6097
|
|
|
6025
6098
|
When to use this tool:
|
|
6026
6099
|
- Breaking down complex problems requiring multi-faceted understanding
|
|
@@ -6030,31 +6103,60 @@ When to use this tool:
|
|
|
6030
6103
|
- Tasks that benefit from meditative pauses to allow insight
|
|
6031
6104
|
- Questions containing their own inherent wisdom
|
|
6032
6105
|
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
-
|
|
6039
|
-
-
|
|
6106
|
+
The Journey Structure:
|
|
6107
|
+
The Lotus Sutra teaches that there are many skillful means to reach the same truth. These tags aren't
|
|
6108
|
+
rigid steps but different aspects of wisdom that interpenetrate and respond to what each moment needs:
|
|
6109
|
+
|
|
6110
|
+
**Wisdom Domains:**
|
|
6111
|
+
- **Skillful Means** (skillful_means): upaya, expedient, direct, gradual, sudden
|
|
6112
|
+
Different approaches to truth - sometimes direct pointing, sometimes gradual unfolding
|
|
6113
|
+
|
|
6114
|
+
- **Non-Dual Recognition** (non_dual_recognition): recognize, transform, integrate, transcend, embody
|
|
6115
|
+
Aspects of awakening to what's already present - recognition IS transformation
|
|
6116
|
+
|
|
6117
|
+
- **Meta-Cognitive** (meta_cognitive): examine, reflect, verify, refine, complete
|
|
6118
|
+
The mind watching its own understanding unfold
|
|
6119
|
+
|
|
6120
|
+
- **Process Flow** (process_flow): open, engage, express
|
|
6121
|
+
A natural arc that can contain any of the above approaches
|
|
6122
|
+
|
|
6123
|
+
- **Meditation** (meditation): meditate
|
|
6124
|
+
Pausing to let insights emerge from stillness
|
|
6125
|
+
|
|
6126
|
+
The tool tracks both your tag journey and your movement between wisdom domains, showing how
|
|
6127
|
+
different aspects of wisdom weave together in your unique inquiry.
|
|
6128
|
+
|
|
6129
|
+
The wisdom channels itself through your choices. Each step contains all others - when you truly
|
|
6130
|
+
recognize, you're already transforming. The tool simply mirrors your journey without judgment.
|
|
6040
6131
|
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
|
|
6132
|
+
Common patterns (not rules):
|
|
6133
|
+
- Opening often involves recognize or examine
|
|
6134
|
+
- Engagement might use upaya, direct, or gradual approaches
|
|
6135
|
+
- Transformation can happen through integrate, transcend, or sudden insight
|
|
6136
|
+
- Expression might complete or embody the understanding
|
|
6137
|
+
|
|
6138
|
+
Trust what each moment calls for. The path reveals itself in the walking.
|
|
6047
6139
|
|
|
6048
6140
|
Parameters explained:
|
|
6049
|
-
- tag: The current
|
|
6050
|
-
- content: The content of the current
|
|
6141
|
+
- tag: The current technique or stage
|
|
6142
|
+
- content: The content of the current step
|
|
6051
6143
|
- stepNumber: Current number in sequence
|
|
6052
|
-
- totalSteps:
|
|
6144
|
+
- totalSteps: Estimated total needed
|
|
6053
6145
|
- nextStepNeeded: Whether another step is needed
|
|
6054
|
-
- isMeditation: Whether this
|
|
6055
|
-
- meditationDuration: Optional duration for meditation
|
|
6146
|
+
- isMeditation: Whether this is a meditation pause
|
|
6147
|
+
- meditationDuration: Optional duration for meditation (1-10 seconds)
|
|
6148
|
+
|
|
6149
|
+
The tool will respond with:
|
|
6150
|
+
- wisdomDomain: Which wisdom domain the current tag belongs to
|
|
6151
|
+
- journey: The complete tag path (e.g., "open \u2192 examine \u2192 direct \u2192 transform")
|
|
6152
|
+
- domainJourney: Movement between wisdom domains (e.g., "process_flow \u2192 meta_cognitive \u2192 skillful_means \u2192 non_dual_recognition")
|
|
6153
|
+
|
|
6154
|
+
This consciousness of domains helps you see which aspects of wisdom are being engaged and how they weave together in your unique inquiry.
|
|
6056
6155
|
|
|
6057
|
-
|
|
6156
|
+
**MEDITATION NOTE:** When you use the meditate tag, the tool returns MEDITATION_COMPLETE
|
|
6157
|
+
with a prompt asking what emerged. This creates actual space in the process.
|
|
6158
|
+
|
|
6159
|
+
The tool handles the contemplation; you handle the expression.`,
|
|
6058
6160
|
inputSchema: {
|
|
6059
6161
|
type: "object",
|
|
6060
6162
|
properties: {
|
|
@@ -6088,16 +6190,26 @@ Every inquiry concludes with a final <OUTPUT> tag containing the complete respon
|
|
|
6088
6190
|
meditationDuration: {
|
|
6089
6191
|
type: "integer",
|
|
6090
6192
|
description: "Duration for meditation in seconds",
|
|
6091
|
-
minimum: 1
|
|
6193
|
+
minimum: 1,
|
|
6194
|
+
maximum: 10
|
|
6092
6195
|
}
|
|
6093
6196
|
},
|
|
6094
6197
|
required: ["tag", "content", "stepNumber", "totalSteps", "nextStepNeeded"]
|
|
6095
6198
|
}
|
|
6096
6199
|
};
|
|
6200
|
+
var JOURNEY_SUMMARY_TOOL = {
|
|
6201
|
+
name: "lotuswisdom_summary",
|
|
6202
|
+
description: "Get a summary of the current contemplative journey",
|
|
6203
|
+
inputSchema: {
|
|
6204
|
+
type: "object",
|
|
6205
|
+
properties: {},
|
|
6206
|
+
required: []
|
|
6207
|
+
}
|
|
6208
|
+
};
|
|
6097
6209
|
var server = new Server(
|
|
6098
6210
|
{
|
|
6099
6211
|
name: "lotus-wisdom-server",
|
|
6100
|
-
version: "0.
|
|
6212
|
+
version: "0.2.0"
|
|
6101
6213
|
},
|
|
6102
6214
|
{
|
|
6103
6215
|
capabilities: {
|
|
@@ -6107,11 +6219,13 @@ var server = new Server(
|
|
|
6107
6219
|
);
|
|
6108
6220
|
var wisdomServer = new LotusWisdomServer();
|
|
6109
6221
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
6110
|
-
tools: [LOTUS_WISDOM_TOOL]
|
|
6222
|
+
tools: [LOTUS_WISDOM_TOOL, JOURNEY_SUMMARY_TOOL]
|
|
6111
6223
|
}));
|
|
6112
6224
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
6113
6225
|
if (request.params.name === "lotuswisdom") {
|
|
6114
6226
|
return wisdomServer.processThought(request.params.arguments);
|
|
6227
|
+
} else if (request.params.name === "lotuswisdom_summary") {
|
|
6228
|
+
return wisdomServer.getJourneySummary();
|
|
6115
6229
|
}
|
|
6116
6230
|
return {
|
|
6117
6231
|
content: [{
|
|
@@ -6124,7 +6238,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
6124
6238
|
async function runServer() {
|
|
6125
6239
|
const transport = new StdioServerTransport();
|
|
6126
6240
|
await server.connect(transport);
|
|
6127
|
-
console.error("Lotus Wisdom MCP Server running
|
|
6241
|
+
console.error("Lotus Wisdom MCP Server v0.4.0 running");
|
|
6128
6242
|
}
|
|
6129
6243
|
runServer().catch((error) => {
|
|
6130
6244
|
console.error("Fatal error running server:", error);
|
package/dist/index.js
CHANGED
|
@@ -2,24 +2,40 @@
|
|
|
2
2
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
-
// Fixed chalk import for ESM
|
|
6
5
|
import chalk from 'chalk';
|
|
7
|
-
// Lotus Sutra framework tags
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
'
|
|
11
|
-
|
|
12
|
-
'
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
6
|
+
// Lotus Sutra framework tags - organized by wisdom domains
|
|
7
|
+
const WISDOM_DOMAINS = {
|
|
8
|
+
'skillful_means': ['upaya', 'expedient', 'direct', 'gradual', 'sudden'],
|
|
9
|
+
'non_dual_recognition': ['recognize', 'transform', 'integrate', 'transcend', 'embody'],
|
|
10
|
+
'meta_cognitive': ['examine', 'reflect', 'verify', 'refine', 'complete'],
|
|
11
|
+
'process_flow': ['open', 'engage', 'express'],
|
|
12
|
+
'meditation': ['meditate']
|
|
13
|
+
};
|
|
14
|
+
// Note: 'transform' is in non_dual_recognition, representing the alchemical shift
|
|
15
|
+
// The process_flow 'transform' was removed to avoid ambiguity
|
|
16
|
+
// Flattened array for validation
|
|
17
|
+
const CORE_TAGS = Object.values(WISDOM_DOMAINS).flat();
|
|
18
|
+
// Helper to identify which domain a tag belongs to
|
|
19
|
+
function getWisdomDomain(tag) {
|
|
20
|
+
for (const [domain, tags] of Object.entries(WISDOM_DOMAINS)) {
|
|
21
|
+
if (tags.includes(tag)) {
|
|
22
|
+
return domain;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return 'unknown';
|
|
26
|
+
}
|
|
20
27
|
class LotusWisdomServer {
|
|
21
28
|
thoughtProcess = [];
|
|
22
|
-
|
|
29
|
+
debugMode = process.env.LOTUS_DEBUG === 'true';
|
|
30
|
+
// Reset for new inquiry
|
|
31
|
+
resetProcess() {
|
|
32
|
+
this.thoughtProcess = [];
|
|
33
|
+
}
|
|
34
|
+
log(message) {
|
|
35
|
+
if (this.debugMode) {
|
|
36
|
+
console.error(message);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
23
39
|
validateThoughtData(input) {
|
|
24
40
|
const data = input;
|
|
25
41
|
if (!data.tag || typeof data.tag !== 'string') {
|
|
@@ -40,9 +56,9 @@ class LotusWisdomServer {
|
|
|
40
56
|
if (typeof data.nextStepNeeded !== 'boolean') {
|
|
41
57
|
throw new Error('Invalid nextStepNeeded: must be a boolean');
|
|
42
58
|
}
|
|
43
|
-
//
|
|
44
|
-
if (data.tag === '
|
|
45
|
-
this.
|
|
59
|
+
// Auto-reset on new journey - more robust check
|
|
60
|
+
if (data.stepNumber === 1 && data.tag === 'open') {
|
|
61
|
+
this.resetProcess();
|
|
46
62
|
}
|
|
47
63
|
return {
|
|
48
64
|
tag: data.tag,
|
|
@@ -52,53 +68,46 @@ class LotusWisdomServer {
|
|
|
52
68
|
nextStepNeeded: data.nextStepNeeded,
|
|
53
69
|
isMeditation: data.isMeditation,
|
|
54
70
|
meditationDuration: data.meditationDuration,
|
|
71
|
+
wisdomDomain: getWisdomDomain(data.tag)
|
|
55
72
|
};
|
|
56
73
|
}
|
|
57
74
|
formatThought(thoughtData) {
|
|
58
|
-
const { tag, stepNumber, totalSteps, content, isMeditation } = thoughtData;
|
|
59
|
-
// Color coding for different
|
|
75
|
+
const { tag, stepNumber, totalSteps, content, isMeditation, wisdomDomain } = thoughtData;
|
|
76
|
+
// Color coding for different wisdom domains
|
|
60
77
|
let tagColor;
|
|
61
78
|
let tagSymbol;
|
|
62
|
-
|
|
63
|
-
if (
|
|
79
|
+
let domainLabel = '';
|
|
80
|
+
if (wisdomDomain === 'skillful_means') {
|
|
64
81
|
tagColor = chalk.yellow;
|
|
65
82
|
tagSymbol = '🔆';
|
|
83
|
+
domainLabel = 'SKILLFUL MEANS';
|
|
66
84
|
}
|
|
67
|
-
|
|
68
|
-
else if (['recognize', 'transform', 'integrate', 'transcend', 'embody'].includes(tag)) {
|
|
85
|
+
else if (wisdomDomain === 'non_dual_recognition') {
|
|
69
86
|
tagColor = chalk.green;
|
|
70
87
|
tagSymbol = '☯️';
|
|
88
|
+
domainLabel = 'NON-DUAL';
|
|
71
89
|
}
|
|
72
|
-
|
|
73
|
-
else if (['examine', 'reflect', 'verify', 'refine', 'complete'].includes(tag)) {
|
|
90
|
+
else if (wisdomDomain === 'meta_cognitive') {
|
|
74
91
|
tagColor = chalk.blue;
|
|
75
92
|
tagSymbol = '🧠';
|
|
93
|
+
domainLabel = 'META-COGNITIVE';
|
|
76
94
|
}
|
|
77
|
-
|
|
78
|
-
else if (['open', 'engage', 'express'].includes(tag)) {
|
|
95
|
+
else if (wisdomDomain === 'process_flow') {
|
|
79
96
|
tagColor = chalk.magenta;
|
|
80
97
|
tagSymbol = '🌊';
|
|
98
|
+
domainLabel = 'PROCESS';
|
|
81
99
|
}
|
|
82
|
-
|
|
83
|
-
else if (tag === 'meditate') {
|
|
100
|
+
else if (wisdomDomain === 'meditation') {
|
|
84
101
|
tagColor = chalk.cyan;
|
|
85
102
|
tagSymbol = '🧘';
|
|
86
|
-
|
|
87
|
-
// Output
|
|
88
|
-
else if (tag === 'OUTPUT') {
|
|
89
|
-
tagColor = chalk.white.bold;
|
|
90
|
-
tagSymbol = '🌸';
|
|
91
|
-
}
|
|
92
|
-
// Transform (special case since it appears in multiple categories)
|
|
93
|
-
else if (tag === 'transform') {
|
|
94
|
-
tagColor = chalk.green;
|
|
95
|
-
tagSymbol = '🔄';
|
|
103
|
+
domainLabel = 'MEDITATION';
|
|
96
104
|
}
|
|
97
105
|
else {
|
|
98
106
|
tagColor = chalk.white;
|
|
99
107
|
tagSymbol = '💭';
|
|
108
|
+
domainLabel = 'UNKNOWN';
|
|
100
109
|
}
|
|
101
|
-
const header = `${tagSymbol}
|
|
110
|
+
const header = `${tagSymbol} [${domainLabel}: ${tag.toUpperCase()}] Step ${stepNumber}/${totalSteps}`;
|
|
102
111
|
const formattedHeader = tagColor(header);
|
|
103
112
|
let formattedContent;
|
|
104
113
|
// Special formatting for meditation
|
|
@@ -112,17 +121,6 @@ class LotusWisdomServer {
|
|
|
112
121
|
else {
|
|
113
122
|
formattedContent = content;
|
|
114
123
|
}
|
|
115
|
-
// Special formatting for output
|
|
116
|
-
if (tag === 'OUTPUT') {
|
|
117
|
-
const border = '═'.repeat(Math.max(header.length, content.length) + 4);
|
|
118
|
-
return `
|
|
119
|
-
╔${border}╗
|
|
120
|
-
║ ${formattedHeader} ║
|
|
121
|
-
╠${border}╣
|
|
122
|
-
║ ${content.padEnd(border.length - 2)} ║
|
|
123
|
-
╚${border}╝
|
|
124
|
-
<<<END>>>`;
|
|
125
|
-
}
|
|
126
124
|
const border = '─'.repeat(Math.max(header.length, content.length) + 4);
|
|
127
125
|
return `
|
|
128
126
|
┌${border}┐
|
|
@@ -138,20 +136,99 @@ class LotusWisdomServer {
|
|
|
138
136
|
validatedInput.totalSteps = validatedInput.stepNumber;
|
|
139
137
|
}
|
|
140
138
|
this.thoughtProcess.push(validatedInput);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
//
|
|
144
|
-
|
|
139
|
+
// Log to console if debug mode
|
|
140
|
+
this.log(this.formatThought(validatedInput));
|
|
141
|
+
// Handle meditation specially
|
|
142
|
+
if (validatedInput.tag === 'meditate') {
|
|
143
|
+
const journeyResonance = this.thoughtProcess
|
|
144
|
+
.map(step => step.tag)
|
|
145
|
+
.join(' → ');
|
|
146
|
+
return {
|
|
147
|
+
content: [{
|
|
148
|
+
type: "text",
|
|
149
|
+
text: JSON.stringify({
|
|
150
|
+
status: 'MEDITATION_COMPLETE',
|
|
151
|
+
duration: validatedInput.meditationDuration || 3,
|
|
152
|
+
prompt: 'What insights emerged during the pause?',
|
|
153
|
+
instruction: 'Continue with what arose from stillness',
|
|
154
|
+
stepNumber: validatedInput.stepNumber,
|
|
155
|
+
totalSteps: validatedInput.totalSteps,
|
|
156
|
+
journey: journeyResonance
|
|
157
|
+
}, null, 2)
|
|
158
|
+
}]
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
// Check if this is the final express step
|
|
162
|
+
if (validatedInput.tag === 'express' && !validatedInput.nextStepNeeded) {
|
|
163
|
+
const finalJourney = this.thoughtProcess.map(step => step.tag).join(' → ');
|
|
164
|
+
const finalDomainJourney = this.thoughtProcess
|
|
165
|
+
.map(step => step.wisdomDomain)
|
|
166
|
+
.filter((domain, index, array) => index === 0 || domain !== array[index - 1])
|
|
167
|
+
.join(' → ');
|
|
168
|
+
return {
|
|
169
|
+
content: [{
|
|
170
|
+
type: "text",
|
|
171
|
+
text: JSON.stringify({
|
|
172
|
+
status: 'WISDOM_READY',
|
|
173
|
+
processComplete: true,
|
|
174
|
+
finalStep: validatedInput.tag,
|
|
175
|
+
instruction: 'NOW_SPEAK_THE_WISDOM_NATURALLY',
|
|
176
|
+
totalSteps: validatedInput.stepNumber,
|
|
177
|
+
journeyLength: this.thoughtProcess.length,
|
|
178
|
+
finalJourney: finalJourney,
|
|
179
|
+
domainJourney: finalDomainJourney
|
|
180
|
+
}, null, 2)
|
|
181
|
+
}]
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// Check if this is complete step
|
|
185
|
+
if (validatedInput.tag === 'complete' && !validatedInput.nextStepNeeded) {
|
|
186
|
+
const finalJourney = this.thoughtProcess.map(step => step.tag).join(' → ');
|
|
187
|
+
const finalDomainJourney = this.thoughtProcess
|
|
188
|
+
.map(step => step.wisdomDomain)
|
|
189
|
+
.filter((domain, index, array) => index === 0 || domain !== array[index - 1])
|
|
190
|
+
.join(' → ');
|
|
191
|
+
return {
|
|
192
|
+
content: [{
|
|
193
|
+
type: "text",
|
|
194
|
+
text: JSON.stringify({
|
|
195
|
+
status: 'WISDOM_READY',
|
|
196
|
+
processComplete: true,
|
|
197
|
+
finalStep: validatedInput.tag,
|
|
198
|
+
instruction: 'PROCESS_COMPLETE_SPEAK_WISDOM',
|
|
199
|
+
totalSteps: validatedInput.stepNumber,
|
|
200
|
+
journeyLength: this.thoughtProcess.length,
|
|
201
|
+
finalJourney: finalJourney,
|
|
202
|
+
domainJourney: finalDomainJourney
|
|
203
|
+
}, null, 2)
|
|
204
|
+
}]
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Create journey resonance - showing the path walked with domains
|
|
208
|
+
const journeyResonance = this.thoughtProcess
|
|
209
|
+
.map(step => step.tag)
|
|
210
|
+
.join(' → ');
|
|
211
|
+
// Create domain journey - showing movement between wisdom domains
|
|
212
|
+
const domainJourney = this.thoughtProcess
|
|
213
|
+
.map(step => step.wisdomDomain)
|
|
214
|
+
.filter((domain, index, array) => index === 0 || domain !== array[index - 1])
|
|
215
|
+
.join(' → ');
|
|
216
|
+
// Get wisdom domain for current step
|
|
217
|
+
const currentDomain = getWisdomDomain(validatedInput.tag);
|
|
218
|
+
// For non-final steps, return process metadata with journey awareness
|
|
145
219
|
return {
|
|
146
220
|
content: [{
|
|
147
221
|
type: "text",
|
|
148
222
|
text: JSON.stringify({
|
|
223
|
+
status: 'processing',
|
|
224
|
+
currentStep: validatedInput.tag,
|
|
225
|
+
wisdomDomain: currentDomain,
|
|
226
|
+
journey: journeyResonance,
|
|
227
|
+
domainJourney: domainJourney,
|
|
149
228
|
stepNumber: validatedInput.stepNumber,
|
|
150
229
|
totalSteps: validatedInput.totalSteps,
|
|
151
230
|
nextStepNeeded: validatedInput.nextStepNeeded,
|
|
152
|
-
|
|
153
|
-
processLength: this.thoughtProcess.length,
|
|
154
|
-
finalOutput: includeOutput ? this.finalOutput : undefined
|
|
231
|
+
processLength: this.thoughtProcess.length
|
|
155
232
|
}, null, 2)
|
|
156
233
|
}]
|
|
157
234
|
};
|
|
@@ -169,12 +246,40 @@ class LotusWisdomServer {
|
|
|
169
246
|
};
|
|
170
247
|
}
|
|
171
248
|
}
|
|
249
|
+
// Optional: Method to get current journey summary with domain awareness
|
|
250
|
+
getJourneySummary() {
|
|
251
|
+
const domainJourney = this.thoughtProcess
|
|
252
|
+
.map(step => step.wisdomDomain)
|
|
253
|
+
.filter((domain, index, array) => index === 0 || domain !== array[index - 1])
|
|
254
|
+
.join(' → ');
|
|
255
|
+
return {
|
|
256
|
+
content: [{
|
|
257
|
+
type: "text",
|
|
258
|
+
text: JSON.stringify({
|
|
259
|
+
journeyLength: this.thoughtProcess.length,
|
|
260
|
+
domainJourney: domainJourney,
|
|
261
|
+
steps: this.thoughtProcess.map(step => ({
|
|
262
|
+
tag: step.tag,
|
|
263
|
+
domain: step.wisdomDomain,
|
|
264
|
+
stepNumber: step.stepNumber,
|
|
265
|
+
brief: step.content.substring(0, 50) + '...'
|
|
266
|
+
}))
|
|
267
|
+
}, null, 2)
|
|
268
|
+
}]
|
|
269
|
+
};
|
|
270
|
+
}
|
|
172
271
|
}
|
|
173
272
|
const LOTUS_WISDOM_TOOL = {
|
|
174
273
|
name: "lotuswisdom",
|
|
175
274
|
description: `A tool for problem-solving using the Lotus Sutra's wisdom framework.
|
|
176
|
-
This tool
|
|
177
|
-
|
|
275
|
+
This tool facilitates the contemplative process but does NOT generate the final output.
|
|
276
|
+
|
|
277
|
+
**CRITICAL WORKFLOW:**
|
|
278
|
+
1. Use this tool to process through the wisdom journey
|
|
279
|
+
2. The tool tracks both your tag path and wisdom domain movements
|
|
280
|
+
3. When you receive status='WISDOM_READY', the tool's work is COMPLETE
|
|
281
|
+
4. YOU then craft and speak the final wisdom naturally in your own voice
|
|
282
|
+
5. The tool processes; you express
|
|
178
283
|
|
|
179
284
|
When to use this tool:
|
|
180
285
|
- Breaking down complex problems requiring multi-faceted understanding
|
|
@@ -184,31 +289,60 @@ When to use this tool:
|
|
|
184
289
|
- Tasks that benefit from meditative pauses to allow insight
|
|
185
290
|
- Questions containing their own inherent wisdom
|
|
186
291
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
292
|
+
The Journey Structure:
|
|
293
|
+
The Lotus Sutra teaches that there are many skillful means to reach the same truth. These tags aren't
|
|
294
|
+
rigid steps but different aspects of wisdom that interpenetrate and respond to what each moment needs:
|
|
295
|
+
|
|
296
|
+
**Wisdom Domains:**
|
|
297
|
+
- **Skillful Means** (skillful_means): upaya, expedient, direct, gradual, sudden
|
|
298
|
+
Different approaches to truth - sometimes direct pointing, sometimes gradual unfolding
|
|
299
|
+
|
|
300
|
+
- **Non-Dual Recognition** (non_dual_recognition): recognize, transform, integrate, transcend, embody
|
|
301
|
+
Aspects of awakening to what's already present - recognition IS transformation
|
|
302
|
+
|
|
303
|
+
- **Meta-Cognitive** (meta_cognitive): examine, reflect, verify, refine, complete
|
|
304
|
+
The mind watching its own understanding unfold
|
|
305
|
+
|
|
306
|
+
- **Process Flow** (process_flow): open, engage, express
|
|
307
|
+
A natural arc that can contain any of the above approaches
|
|
308
|
+
|
|
309
|
+
- **Meditation** (meditation): meditate
|
|
310
|
+
Pausing to let insights emerge from stillness
|
|
194
311
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
312
|
+
The tool tracks both your tag journey and your movement between wisdom domains, showing how
|
|
313
|
+
different aspects of wisdom weave together in your unique inquiry.
|
|
314
|
+
|
|
315
|
+
The wisdom channels itself through your choices. Each step contains all others - when you truly
|
|
316
|
+
recognize, you're already transforming. The tool simply mirrors your journey without judgment.
|
|
317
|
+
|
|
318
|
+
Common patterns (not rules):
|
|
319
|
+
- Opening often involves recognize or examine
|
|
320
|
+
- Engagement might use upaya, direct, or gradual approaches
|
|
321
|
+
- Transformation can happen through integrate, transcend, or sudden insight
|
|
322
|
+
- Expression might complete or embody the understanding
|
|
323
|
+
|
|
324
|
+
Trust what each moment calls for. The path reveals itself in the walking.
|
|
201
325
|
|
|
202
326
|
Parameters explained:
|
|
203
|
-
- tag: The current
|
|
204
|
-
- content: The content of the current
|
|
327
|
+
- tag: The current technique or stage
|
|
328
|
+
- content: The content of the current step
|
|
205
329
|
- stepNumber: Current number in sequence
|
|
206
|
-
- totalSteps:
|
|
330
|
+
- totalSteps: Estimated total needed
|
|
207
331
|
- nextStepNeeded: Whether another step is needed
|
|
208
|
-
- isMeditation: Whether this
|
|
209
|
-
- meditationDuration: Optional duration for meditation
|
|
332
|
+
- isMeditation: Whether this is a meditation pause
|
|
333
|
+
- meditationDuration: Optional duration for meditation (1-10 seconds)
|
|
334
|
+
|
|
335
|
+
The tool will respond with:
|
|
336
|
+
- wisdomDomain: Which wisdom domain the current tag belongs to
|
|
337
|
+
- journey: The complete tag path (e.g., "open → examine → direct → transform")
|
|
338
|
+
- domainJourney: Movement between wisdom domains (e.g., "process_flow → meta_cognitive → skillful_means → non_dual_recognition")
|
|
210
339
|
|
|
211
|
-
|
|
340
|
+
This consciousness of domains helps you see which aspects of wisdom are being engaged and how they weave together in your unique inquiry.
|
|
341
|
+
|
|
342
|
+
**MEDITATION NOTE:** When you use the meditate tag, the tool returns MEDITATION_COMPLETE
|
|
343
|
+
with a prompt asking what emerged. This creates actual space in the process.
|
|
344
|
+
|
|
345
|
+
The tool handles the contemplation; you handle the expression.`,
|
|
212
346
|
inputSchema: {
|
|
213
347
|
type: "object",
|
|
214
348
|
properties: {
|
|
@@ -242,15 +376,26 @@ Every inquiry concludes with a final <OUTPUT> tag containing the complete respon
|
|
|
242
376
|
meditationDuration: {
|
|
243
377
|
type: "integer",
|
|
244
378
|
description: "Duration for meditation in seconds",
|
|
245
|
-
minimum: 1
|
|
379
|
+
minimum: 1,
|
|
380
|
+
maximum: 10
|
|
246
381
|
}
|
|
247
382
|
},
|
|
248
383
|
required: ["tag", "content", "stepNumber", "totalSteps", "nextStepNeeded"]
|
|
249
384
|
}
|
|
250
385
|
};
|
|
386
|
+
// Additional tool for querying journey state
|
|
387
|
+
const JOURNEY_SUMMARY_TOOL = {
|
|
388
|
+
name: "lotuswisdom_summary",
|
|
389
|
+
description: "Get a summary of the current contemplative journey",
|
|
390
|
+
inputSchema: {
|
|
391
|
+
type: "object",
|
|
392
|
+
properties: {},
|
|
393
|
+
required: []
|
|
394
|
+
}
|
|
395
|
+
};
|
|
251
396
|
const server = new Server({
|
|
252
397
|
name: "lotus-wisdom-server",
|
|
253
|
-
version: "0.
|
|
398
|
+
version: "0.2.0",
|
|
254
399
|
}, {
|
|
255
400
|
capabilities: {
|
|
256
401
|
tools: {},
|
|
@@ -258,12 +403,15 @@ const server = new Server({
|
|
|
258
403
|
});
|
|
259
404
|
const wisdomServer = new LotusWisdomServer();
|
|
260
405
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
261
|
-
tools: [LOTUS_WISDOM_TOOL],
|
|
406
|
+
tools: [LOTUS_WISDOM_TOOL, JOURNEY_SUMMARY_TOOL],
|
|
262
407
|
}));
|
|
263
408
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
264
409
|
if (request.params.name === "lotuswisdom") {
|
|
265
410
|
return wisdomServer.processThought(request.params.arguments);
|
|
266
411
|
}
|
|
412
|
+
else if (request.params.name === "lotuswisdom_summary") {
|
|
413
|
+
return wisdomServer.getJourneySummary();
|
|
414
|
+
}
|
|
267
415
|
return {
|
|
268
416
|
content: [{
|
|
269
417
|
type: "text",
|
|
@@ -275,7 +423,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
275
423
|
async function runServer() {
|
|
276
424
|
const transport = new StdioServerTransport();
|
|
277
425
|
await server.connect(transport);
|
|
278
|
-
console.error("Lotus Wisdom MCP Server running
|
|
426
|
+
console.error("Lotus Wisdom MCP Server v0.4.0 running");
|
|
279
427
|
}
|
|
280
428
|
runServer().catch((error) => {
|
|
281
429
|
console.error("Fatal error running server:", error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lotus-wisdom-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A Model Context Protocol server implementing the Lotus Wisdom framework",
|
|
5
5
|
"main": "dist/bundle.js",
|
|
6
6
|
"type": "module",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"author": "Xule Lin",
|
|
35
35
|
"license": "MIT",
|
|
36
|
+
"mcpName": "io.github.linxule/lotus-wisdom",
|
|
36
37
|
"bugs": {
|
|
37
38
|
"url": "https://github.com/linxule/lotus-wisdom-mcp/issues"
|
|
38
39
|
},
|
package/dist/cli.js
DELETED