diff --git a/nextcloud_mcp_server/auth/static/vector-viz.js b/nextcloud_mcp_server/auth/static/vector-viz.js index f59f46c..945a726 100644 --- a/nextcloud_mcp_server/auth/static/vector-viz.js +++ b/nextcloud_mcp_server/auth/static/vector-viz.js @@ -203,6 +203,8 @@ function vizApp() { return `${baseUrl}/apps/contacts`; case 'deck': return `${baseUrl}/apps/deck`; + case 'news_item': + return `${baseUrl}/apps/news/item/${result.id}`; default: return `${baseUrl}`; } diff --git a/nextcloud_mcp_server/auth/templates/vector_viz.html b/nextcloud_mcp_server/auth/templates/vector_viz.html index c36a0eb..7e3747c 100644 --- a/nextcloud_mcp_server/auth/templates/vector_viz.html +++ b/nextcloud_mcp_server/auth/templates/vector_viz.html @@ -68,6 +68,10 @@ Deck + diff --git a/nextcloud_mcp_server/search/context.py b/nextcloud_mcp_server/search/context.py index eda4d1e..cb1cad9 100644 --- a/nextcloud_mcp_server/search/context.py +++ b/nextcloud_mcp_server/search/context.py @@ -524,6 +524,26 @@ async def _fetch_document_text( f"Error fetching file content for {doc_id}: {e}", exc_info=True ) return None + elif doc_type == "news_item": + # Fetch news item by ID + from nextcloud_mcp_server.vector.html_processor import html_to_markdown + + item = await nc_client.news.get_item(int(doc_id)) + # Reconstruct full content as indexed: title + source + URL + body + # This ensures chunk offsets align with indexed content structure + body_markdown = html_to_markdown(item.get("body", "")) + item_title = item.get("title", "") + item_url = item.get("url", "") + feed_title = item.get("feedTitle", "") + + content_parts = [item_title] + if feed_title: + content_parts.append(f"Source: {feed_title}") + if item_url: + content_parts.append(f"URL: {item_url}") + content_parts.append("") # Blank line + content_parts.append(body_markdown) + return "\n".join(content_parts) else: logger.warning(f"Unsupported doc_type for context expansion: {doc_type}") return None