From c62c0bcbfe394076ec3205d8c444cc3f78b9298e Mon Sep 17 00:00:00 2001 From: Sam Saffron Date: Tue, 2 Dec 2025 10:43:32 +1100 Subject: [PATCH] DOCS: remove latest-post order hallucination --- README.md | 4 ++-- src/test/tools.test.ts | 40 ++++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 672854b..9878134 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ The server registers tools under the MCP server name `@discourse/mcp`. Choose a - `silent`: No logging output - `--tools_mode ` (default: auto) - `--site `: Tether MCP to a single site and hide `discourse_select_site`. - - `--default-search `: Unconditionally prefix every search query (e.g., `tag:ai order:latest-post`). + - `--default-search `: Unconditionally prefix every search query (e.g., `tag:ai order:latest`). - `--max-read-length `: Maximum characters returned for post content (default 50000). Applies to `discourse_read_post` and per-post content in `discourse_read_topic`. The tools prefer `raw` content by requesting `include_raw=true`. - `--transport ` (default: stdio): Transport type. Use `stdio` for standard input/output (default), or `http` for Streamable HTTP transport (stateless mode with JSON responses). - `--port ` (default: 3000): Port to listen on when using HTTP transport. @@ -92,7 +92,7 @@ The server registers tools under the MCP server name `@discourse/mcp`. Choose a "log_level": "info", "tools_mode": "auto", "site": "https://try.discourse.org", - "default_search": "tag:ai order:latest-post", + "default_search": "tag:ai order:latest", "max_read_length": 50000, "transport": "stdio", "port": 3000 diff --git a/src/test/tools.test.ts b/src/test/tools.test.ts index 0a723dd..840dfc6 100644 --- a/src/test/tools.test.ts +++ b/src/test/tools.test.ts @@ -19,24 +19,24 @@ test('registers built-in tools', async () => { const logger = new Logger('silent'); const siteState = new SiteState({ logger, timeoutMs: 5000, defaultAuth: { type: 'none' } }); -test('registers write-enabled tools when allowWrites=true', async () => { - const logger = new Logger('silent'); - const siteState = new SiteState({ logger, timeoutMs: 5000, defaultAuth: { type: 'none' } }); - - // Minimal fake server to capture tool registrations - const tools: Record = {}; - const fakeServer: any = { - registerTool(name: string, _meta: any, handler: Function) { - tools[name] = { handler }; - }, - }; - - await registerAllTools(fakeServer, siteState, logger, { allowWrites: true, toolsMode: 'discourse_api_only' } as any); - - // When writes are enabled, both create tools should be registered - assert.ok('discourse_create_post' in tools); - assert.ok('discourse_create_category' in tools); -}); + test('registers write-enabled tools when allowWrites=true', async () => { + const logger = new Logger('silent'); + const siteState = new SiteState({ logger, timeoutMs: 5000, defaultAuth: { type: 'none' } }); + + // Minimal fake server to capture tool registrations + const tools: Record = {}; + const fakeServer: any = { + registerTool(name: string, _meta: any, handler: Function) { + tools[name] = { handler }; + }, + }; + + await registerAllTools(fakeServer, siteState, logger, { allowWrites: true, toolsMode: 'discourse_api_only' } as any); + + // When writes are enabled, both create tools should be registered + assert.ok('discourse_create_post' in tools); + assert.ok('discourse_create_category' in tools); + }); const server = new McpServer({ name: 'test', version: '0.0.0' }, { capabilities: { tools: { listChanged: false } } }); await registerAllTools(server as any, siteState, logger, { allowWrites: false, toolsMode: 'discourse_api_only' }); @@ -189,14 +189,14 @@ test('default-search prefix is applied to queries', async () => { await client.get('/about.json'); siteState.selectSite(base); - await registerAllTools(fakeServer, siteState, logger, { allowWrites: false, toolsMode: 'discourse_api_only', defaultSearchPrefix: 'tag:ai order:latest-post' } as any); + await registerAllTools(fakeServer, siteState, logger, { allowWrites: false, toolsMode: 'discourse_api_only', defaultSearchPrefix: 'tag:ai order:latest' } as any); await tools['discourse_search'].handler({ query: 'hello world' }, {}); assert.ok(lastUrl && lastUrl.includes('/search.json?')); const qs = lastUrl!.split('?')[1] || ''; const params = new URLSearchParams(qs); assert.equal(params.get('expanded'), 'true'); - assert.equal(params.get('q'), 'tag:ai order:latest-post hello world'); + assert.equal(params.get('q'), 'tag:ai order:latest hello world'); } finally { globalThis.fetch = originalFetch as any; }