fix: Use correct ProseMirror mark types (strong/em)

Outline schema uses:
- "strong" not "bold"
- "em" not "italic"

Error was: "RangeError: There is no mark type bold in this schema"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-31 21:23:27 +00:00
parent 12d3b26454
commit f640465f86
9 changed files with 24 additions and 13 deletions

View File

@@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file.
## [1.3.15] - 2026-01-31
### Fixed
- **ProseMirror Mark Types:** Fixed mark type names to match Outline schema
- `bold``strong`
- `italic``em`
- Error was: "RangeError: There is no mark type bold in this schema"
## [1.3.14] - 2026-01-31
### Added

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`.
**Version:** 1.3.14
**Version:** 1.3.15
**Total Tools:** 164 tools across 33 modules
**Production:** hub.descomplicar.pt (via SSH tunnel)

View File

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

4
package-lock.json generated
View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -177,25 +177,25 @@ function parseInlineContent(text: string): ProseMirrorNode[] {
continue;
}
// Bold
// Bold (Outline uses "strong" not "bold")
const boldMatch = remaining.match(/^\*\*([^*]+)\*\*/) || remaining.match(/^__([^_]+)__/);
if (boldMatch) {
nodes.push({
type: 'text',
text: boldMatch[1],
marks: [{ type: 'bold' }]
marks: [{ type: 'strong' }]
});
remaining = remaining.slice(boldMatch[0].length);
continue;
}
// Italic
// Italic (Outline uses "em" not "italic")
const italicMatch = remaining.match(/^\*([^*]+)\*/) || remaining.match(/^_([^_]+)_/);
if (italicMatch) {
nodes.push({
type: 'text',
text: italicMatch[1],
marks: [{ type: 'italic' }]
marks: [{ type: 'em' }]
});
remaining = remaining.slice(italicMatch[0].length);
continue;
@@ -289,9 +289,11 @@ function contentToMarkdown(content?: ProseMirrorNode[]): string {
for (const mark of node.marks) {
switch (mark.type) {
case 'bold':
case 'strong':
text = `**${text}**`;
break;
case 'italic':
case 'em':
text = `*${text}*`;
break;
case 'code_inline':