fix: Add default sort value to create_collection

Collections without sort field cause frontend error:
"Cannot read properties of null (reading 'field')"

Now sets {"field": "index", "direction": "asc"} as default.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 18:36:58 +00:00
parent 1c8f6cbab9
commit 1cdeafebb6
9 changed files with 21 additions and 12 deletions

View File

@@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [1.3.8] - 2026-01-31
### Fixed
- **Collection Sort Field:** `create_collection` now sets default `sort` value
- Was: `sort` column left NULL, causing frontend error "Cannot read properties of null (reading 'field')"
- Now: Sets `{"field": "index", "direction": "asc"}` as default
- Outline frontend requires this field to render collections
## [1.3.7] - 2026-01-31 ## [1.3.7] - 2026-01-31
### Fixed ### Fixed

View File

@@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
MCP server for direct PostgreSQL access to Outline Wiki database. Follows patterns established by `mcp-desk-crm-sql-v3`. MCP server for direct PostgreSQL access to Outline Wiki database. Follows patterns established by `mcp-desk-crm-sql-v3`.
**Version:** 1.3.7 **Version:** 1.3.8
**Total Tools:** 164 tools across 33 modules **Total Tools:** 164 tools across 33 modules
**Production:** hub.descomplicar.pt (via SSH tunnel) **Production:** hub.descomplicar.pt (via SSH tunnel)

View File

@@ -1,7 +1,7 @@
# MCP Outline PostgreSQL - Continuacao de Testes # MCP Outline PostgreSQL - Continuacao de Testes
**Ultima Sessao:** 2026-01-31 (actualizado) **Ultima Sessao:** 2026-01-31 (actualizado)
**Versao Actual:** 1.3.7 **Versao Actual:** 1.3.8
**Progresso:** ~95/164 tools testadas (58%) - **CÓDIGO VALIDADO** **Progresso:** ~95/164 tools testadas (58%) - **CÓDIGO VALIDADO**
--- ---

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "mcp-outline-postgresql", "name": "mcp-outline-postgresql",
"version": "1.3.7", "version": "1.3.8",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "mcp-outline-postgresql", "name": "mcp-outline-postgresql",
"version": "1.3.7", "version": "1.3.8",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@modelcontextprotocol/sdk": "^1.0.0", "@modelcontextprotocol/sdk": "^1.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "mcp-outline-postgresql", "name": "mcp-outline-postgresql",
"version": "1.3.7", "version": "1.3.8",
"description": "MCP Server for Outline Wiki via PostgreSQL direct access", "description": "MCP Server for Outline Wiki via PostgreSQL direct access",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {

View File

@@ -68,7 +68,7 @@ async function main() {
JSON.stringify({ JSON.stringify({
status: 'ok', status: 'ok',
transport: 'streamable-http', transport: 'streamable-http',
version: '1.3.7', version: '1.3.8',
sessions: sessions.size, sessions: sessions.size,
stateful: STATEFUL, stateful: STATEFUL,
tools: allTools.length tools: allTools.length
@@ -101,7 +101,7 @@ async function main() {
// Create MCP server // Create MCP server
const server = createMcpServer(pgClient.getPool(), { const server = createMcpServer(pgClient.getPool(), {
name: 'mcp-outline-http', name: 'mcp-outline-http',
version: '1.3.7' version: '1.3.8'
}); });
// Track session if stateful // Track session if stateful

View File

@@ -39,7 +39,7 @@ async function main() {
// Create MCP server with shared configuration // Create MCP server with shared configuration
const server = createMcpServer(pgClient.getPool(), { const server = createMcpServer(pgClient.getPool(), {
name: 'mcp-outline-postgresql', name: 'mcp-outline-postgresql',
version: '1.3.7' version: '1.3.8'
}); });
// Connect stdio transport // Connect stdio transport

View File

@@ -122,7 +122,7 @@ export function createMcpServer(
): Server { ): Server {
const server = new Server({ const server = new Server({
name: config.name || 'mcp-outline-postgresql', name: config.name || 'mcp-outline-postgresql',
version: config.version || '1.3.7' version: config.version || '1.3.8'
}); });
// Set capabilities (required for MCP v2.2+) // Set capabilities (required for MCP v2.2+)

View File

@@ -272,12 +272,12 @@ export const collectionsTools: BaseTool<any>[] = [
const query = ` const query = `
INSERT INTO collections ( INSERT INTO collections (
id, name, "urlId", "teamId", "createdById", description, icon, color, id, name, "urlId", "teamId", "createdById", description, icon, color,
permission, sharing, "maintainerApprovalRequired", index, "createdAt", "updatedAt" permission, sharing, "maintainerApprovalRequired", index, sort, "createdAt", "updatedAt"
) )
VALUES (gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, false, $10, NOW(), NOW()) VALUES (gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, false, $10, '{"field": "index", "direction": "asc"}', NOW(), NOW())
RETURNING RETURNING
id, "urlId", name, description, icon, color, index, permission, id, "urlId", name, description, icon, color, index, permission,
sharing, "teamId", "createdById", "createdAt", "updatedAt" sharing, "teamId", "createdById", "createdAt", "updatedAt", sort
`; `;
const result = await pool.query(query, [ const result = await pool.query(query, [