Skip to content

Commit 3220fcf

Browse files
committed
fix: restore fail-fast behavior for non-discovery mode (issues #1, #7)
Agent-Id: agent-02660ea0-b190-4940-802f-62ed81e5543d
1 parent 5c35f78 commit 3220fcf

File tree

3 files changed

+35
-8
lines changed

3 files changed

+35
-8
lines changed

src/bin/cmd-mcp.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,17 @@ const stdioCommand = new Command("stdio")
4242
store = await CompositeStoreReader.fromSpecs(specs);
4343
discovery = false;
4444
} else {
45-
// Discovery mode only: use FilesystemStore
45+
// No flags: restore original behavior - fail fast if no indexes
4646
store = new FilesystemStore();
47-
indexNames = undefined;
48-
discovery = true;
47+
const availableIndexes = await store.list();
48+
if (availableIndexes.length === 0) {
49+
console.error("Error: No indexes found.");
50+
console.error("The MCP server requires at least one index to operate.");
51+
console.error("Run 'ctxc index --help' to see how to create an index.");
52+
process.exit(1);
53+
}
54+
indexNames = availableIndexes;
55+
discovery = false;
4956
}
5057

5158
// Start MCP server (writes to stdout, reads from stdin)
@@ -103,10 +110,17 @@ const httpCommand = new Command("http")
103110
store = await CompositeStoreReader.fromSpecs(specs);
104111
discovery = false;
105112
} else {
106-
// Discovery mode only: use FilesystemStore
113+
// No flags: restore original behavior - fail fast if no indexes
107114
store = new FilesystemStore();
108-
indexNames = undefined;
109-
discovery = true;
115+
const availableIndexes = await store.list();
116+
if (availableIndexes.length === 0) {
117+
console.error("Error: No indexes found.");
118+
console.error("The MCP server requires at least one index to operate.");
119+
console.error("Run 'ctxc index --help' to see how to create an index.");
120+
process.exit(1);
121+
}
122+
indexNames = availableIndexes;
123+
discovery = false;
110124
}
111125

112126
// Parse CORS option

src/clients/mcp-server.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,13 @@ export async function createMCPServer(
106106
// Create shared runner for multi-index operations
107107
// Build User-Agent for analytics tracking
108108
const clientUserAgent = buildClientUserAgent("mcp");
109-
109+
110110
const runner = await MultiIndexRunner.create({
111111
store: config.store,
112112
indexNames: config.indexNames,
113113
searchOnly: config.searchOnly,
114114
clientUserAgent,
115+
discovery: config.discovery,
115116
});
116117

117118
const { indexNames, indexes } = runner;

src/clients/multi-index-runner.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ export interface MultiIndexRunnerConfig {
4141
* When provided, this is passed to SearchClient instances for API requests.
4242
*/
4343
clientUserAgent?: string;
44+
/**
45+
* Discovery mode flag.
46+
* When true: allow empty index list (user can add indexes later via CLI)
47+
* When false: require at least one valid index to be loaded
48+
* @default false
49+
*/
50+
discovery?: boolean;
4451
}
4552

4653
/**
@@ -122,6 +129,7 @@ export class MultiIndexRunner {
122129
static async create(config: MultiIndexRunnerConfig): Promise<MultiIndexRunner> {
123130
const store = config.store;
124131
const searchOnly = config.searchOnly ?? false;
132+
const discovery = config.discovery ?? false;
125133

126134
// Discover available indexes
127135
const allIndexNames = await store.list();
@@ -158,7 +166,11 @@ export class MultiIndexRunner {
158166
}
159167
}
160168

161-
// Allow empty - server can start with no indexes and user can add via CLI
169+
// In fixed mode (non-discovery), require at least one valid index
170+
if (!discovery && validIndexNames.length === 0) {
171+
throw new Error("No valid indexes loaded. Fixed mode requires at least one index.");
172+
}
173+
162174
return new MultiIndexRunner(store, validIndexNames, indexes, searchOnly, config.clientUserAgent, originalIndexNames);
163175
}
164176

0 commit comments

Comments
 (0)