@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: `excerpt`, `location`, `outfit`, `kink`, `file`
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:fix
137
+ npm run lint:format
138
138
  ```
139
139
 
140
140
  ### Tech Stack
@@ -25,7 +25,7 @@ export async function chapterInfo(args, tracker) {
25
25
  pov: chapter.pov,
26
26
  title: chapter.title,
27
27
  date: chapter.date,
28
- excerpt: chapter.excerpt,
28
+ summary: chapter.summary,
29
29
  location: chapter.location,
30
30
  outfit: chapter.outfit,
31
31
  kink: chapter.kink,
@@ -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
- excerpt: z.ZodOptional<z.ZodString>;
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
- excerpt?: string | undefined;
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
- excerpt?: string | undefined;
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
- excerpt: z.string().optional().describe('Chapter excerpt'),
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
- excerpt: args.excerpt || '',
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
- excerpt: metadata.excerpt || '',
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
- excerpt: chapterData.excerpt,
60
+ summary: chapterData.summary,
61
61
  location: chapterData.location,
62
62
  },
63
63
  stats: {
@@ -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
- // Reconstruct file path from chapter metadata
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
- const chapterFiles = readdirSync(episodePath).filter((f) => f.startsWith(chapterFile) && f.endsWith('.md'));
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
- excerpt: chapterData.metadata.excerpt || '',
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.2",
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:fix": "biome check --write",
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.2.7",
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.0",
85
- "@echoes-io/models": "^1.0.0",
86
- "@echoes-io/rag": "^1.1.0",
87
- "@echoes-io/tracker": "^1.0.0",
88
- "@echoes-io/utils": "^1.1.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
  }