@echoes-io/mcp-server 1.3.2 → 1.3.4
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
CHANGED
|
@@ -69,7 +69,7 @@ All tools operate on the timeline specified by the `ECHOES_TIMELINE` environment
|
|
|
69
69
|
- Input: `file` (path to chapter file)
|
|
70
70
|
|
|
71
71
|
- **`chapter-insert`** - Insert new chapter with automatic renumbering
|
|
72
|
-
- Input: `arc`, `episode`, `after`, `pov`, `title`, optional: `
|
|
72
|
+
- Input: `arc`, `episode`, `after`, `pov`, `title`, optional: `summary`, `location`, `outfit`, `kink`, `file`
|
|
73
73
|
|
|
74
74
|
- **`chapter-delete`** - Delete chapter from database and optionally from filesystem
|
|
75
75
|
- Input: `arc`, `episode`, `chapter`, optional: `file` (to delete from filesystem)
|
|
@@ -134,7 +134,7 @@ npm run build
|
|
|
134
134
|
npm run lint
|
|
135
135
|
|
|
136
136
|
# Fix linting issues
|
|
137
|
-
npm run lint:
|
|
137
|
+
npm run lint:format
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
### Tech Stack
|
|
@@ -6,7 +6,7 @@ export declare const chapterInsertSchema: z.ZodObject<{
|
|
|
6
6
|
after: z.ZodNumber;
|
|
7
7
|
pov: z.ZodString;
|
|
8
8
|
title: z.ZodString;
|
|
9
|
-
|
|
9
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
10
10
|
location: z.ZodOptional<z.ZodString>;
|
|
11
11
|
outfit: z.ZodOptional<z.ZodString>;
|
|
12
12
|
kink: z.ZodOptional<z.ZodString>;
|
|
@@ -18,7 +18,7 @@ export declare const chapterInsertSchema: z.ZodObject<{
|
|
|
18
18
|
pov: string;
|
|
19
19
|
title: string;
|
|
20
20
|
file?: string | undefined;
|
|
21
|
-
|
|
21
|
+
summary?: string | undefined;
|
|
22
22
|
location?: string | undefined;
|
|
23
23
|
outfit?: string | undefined;
|
|
24
24
|
kink?: string | undefined;
|
|
@@ -29,7 +29,7 @@ export declare const chapterInsertSchema: z.ZodObject<{
|
|
|
29
29
|
pov: string;
|
|
30
30
|
title: string;
|
|
31
31
|
file?: string | undefined;
|
|
32
|
-
|
|
32
|
+
summary?: string | undefined;
|
|
33
33
|
location?: string | undefined;
|
|
34
34
|
outfit?: string | undefined;
|
|
35
35
|
kink?: string | undefined;
|
|
@@ -7,7 +7,7 @@ export const chapterInsertSchema = z.object({
|
|
|
7
7
|
after: z.number().describe('Insert after this chapter number'),
|
|
8
8
|
pov: z.string().describe('Point of view character'),
|
|
9
9
|
title: z.string().describe('Chapter title'),
|
|
10
|
-
|
|
10
|
+
summary: z.string().optional().describe('Chapter summary'),
|
|
11
11
|
location: z.string().optional().describe('Chapter location'),
|
|
12
12
|
outfit: z.string().optional().describe('Character outfit'),
|
|
13
13
|
kink: z.string().optional().describe('Content tags'),
|
|
@@ -57,8 +57,8 @@ export async function chapterInsert(args, tracker) {
|
|
|
57
57
|
number: newChapterNumber,
|
|
58
58
|
pov: args.pov,
|
|
59
59
|
title: args.title,
|
|
60
|
-
date: new Date(),
|
|
61
|
-
|
|
60
|
+
date: new Date().toISOString(),
|
|
61
|
+
summary: args.summary || '',
|
|
62
62
|
location: args.location || '',
|
|
63
63
|
outfit: args.outfit || '',
|
|
64
64
|
kink: args.kink || '',
|
|
@@ -29,8 +29,8 @@ export async function chapterRefresh(args, tracker) {
|
|
|
29
29
|
number: chapter,
|
|
30
30
|
pov: metadata.pov || 'Unknown',
|
|
31
31
|
title: metadata.title || 'Untitled',
|
|
32
|
-
date: new Date(metadata.date || Date.now()),
|
|
33
|
-
|
|
32
|
+
date: new Date(metadata.date || Date.now()).toISOString(),
|
|
33
|
+
summary: metadata.summary || '',
|
|
34
34
|
location: metadata.location || '',
|
|
35
35
|
outfit: metadata.outfit || '',
|
|
36
36
|
kink: metadata.kink || '',
|
|
@@ -57,7 +57,7 @@ export async function chapterRefresh(args, tracker) {
|
|
|
57
57
|
pov: chapterData.pov,
|
|
58
58
|
title: chapterData.title,
|
|
59
59
|
date: chapterData.date,
|
|
60
|
-
|
|
60
|
+
summary: chapterData.summary,
|
|
61
61
|
location: chapterData.location,
|
|
62
62
|
},
|
|
63
63
|
stats: {
|
package/lib/tools/rag-index.js
CHANGED
|
@@ -39,10 +39,8 @@ export async function ragIndex(args, tracker, rag) {
|
|
|
39
39
|
// If contentPath is provided, read actual file content
|
|
40
40
|
if (args.contentPath) {
|
|
41
41
|
try {
|
|
42
|
-
//
|
|
42
|
+
// Find episode directory
|
|
43
43
|
const episodeDir = `ep${String(ch.episodeNumber).padStart(2, '0')}`;
|
|
44
|
-
const chapterFile = `ep${String(ch.episodeNumber).padStart(2, '0')}-ch${String(ch.number).padStart(3, '0')}-${ch.pov}`;
|
|
45
|
-
// Try to find the file (we don't know the exact title part)
|
|
46
44
|
const arcPath = join(args.contentPath, ch.arcName);
|
|
47
45
|
const episodePath = readdirSync(arcPath, { withFileTypes: true })
|
|
48
46
|
.filter((e) => e.isDirectory() && e.name.startsWith(episodeDir))
|
|
@@ -51,7 +49,9 @@ export async function ragIndex(args, tracker, rag) {
|
|
|
51
49
|
console.error(`Episode directory not found for ${ch.arcName}/ep${ch.episodeNumber}`);
|
|
52
50
|
return null;
|
|
53
51
|
}
|
|
54
|
-
|
|
52
|
+
// Find chapter file by episode and chapter number (filename-agnostic for title/pov)
|
|
53
|
+
const chapterPattern = `ep${String(ch.episodeNumber).padStart(2, '0')}-ch${String(ch.number).padStart(3, '0')}-`;
|
|
54
|
+
const chapterFiles = readdirSync(episodePath).filter((f) => f.startsWith(chapterPattern) && f.endsWith('.md'));
|
|
55
55
|
if (chapterFiles.length === 0) {
|
|
56
56
|
console.error(`Chapter file not found for ${ch.arcName}/ep${ch.episodeNumber}/ch${ch.number}`);
|
|
57
57
|
return null;
|
|
@@ -120,8 +120,8 @@ export async function timelineSync(args, tracker) {
|
|
|
120
120
|
number: chNumber,
|
|
121
121
|
pov: chapterData.metadata.pov || 'Unknown',
|
|
122
122
|
title: chapterData.metadata.title || 'Untitled',
|
|
123
|
-
date: new Date(chapterData.metadata.date || Date.now()),
|
|
124
|
-
|
|
123
|
+
date: new Date(chapterData.metadata.date || Date.now()).toISOString(),
|
|
124
|
+
summary: chapterData.metadata.summary || '',
|
|
125
125
|
location: chapterData.metadata.location || '',
|
|
126
126
|
outfit: chapterData.metadata.outfit || '',
|
|
127
127
|
kink: chapterData.metadata.kink || '',
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@echoes-io/mcp-server",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.4",
|
|
5
5
|
"description": "Model Context Protocol server for AI integration with Echoes storytelling platform",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "tsx cli/index.ts",
|
|
8
8
|
"start": "node cli/index.js",
|
|
9
9
|
"lint": "concurrently npm:lint:* --prefixColors auto",
|
|
10
|
-
"lint:
|
|
10
|
+
"lint:format": "biome check --write",
|
|
11
11
|
"lint:lockfile": "lockfile-lint --path package-lock.json",
|
|
12
12
|
"lint:engines": "ls-engines",
|
|
13
13
|
"lint:publish": "publint --strict",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
]
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@biomejs/biome": "^2.
|
|
65
|
+
"@biomejs/biome": "^2.3.0",
|
|
66
66
|
"@semantic-release/changelog": "^6.0.3",
|
|
67
67
|
"@semantic-release/git": "^10.0.1",
|
|
68
68
|
"@tsconfig/node22": "^22.0.2",
|
|
@@ -81,11 +81,11 @@
|
|
|
81
81
|
"vitest": "^3.2.4"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
|
-
"@echoes-io/books-generator": "^1.0.
|
|
85
|
-
"@echoes-io/models": "^1.0.
|
|
86
|
-
"@echoes-io/rag": "^1.1.
|
|
87
|
-
"@echoes-io/tracker": "^1.0.
|
|
88
|
-
"@echoes-io/utils": "^1.
|
|
84
|
+
"@echoes-io/books-generator": "^1.0.1",
|
|
85
|
+
"@echoes-io/models": "^1.0.2",
|
|
86
|
+
"@echoes-io/rag": "^1.1.2",
|
|
87
|
+
"@echoes-io/tracker": "^1.0.1",
|
|
88
|
+
"@echoes-io/utils": "^1.2.0",
|
|
89
89
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
90
90
|
}
|
|
91
91
|
}
|