Files
nextcloud-mcp-server/third_party/astrolabe/CHANGELOG.md
T
2026-02-03 06:50:26 +00:00

25 KiB

Changelog - Astrolabe

All notable changes to the Astrolabe Nextcloud app will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Added

  • Initial alpha release
  • Semantic search across Notes, Files, Calendar, Deck, and Contacts
  • Integration with Nextcloud Unified Search
  • Personal settings UI for MCP server configuration
  • Admin settings for global MCP server URL
  • OAuth PKCE authentication flow
  • Vector visualization of semantic relationships
  • Hybrid search combining semantic and keyword matching
  • Background content indexing
  • Support for Nextcloud 30-32

Notes

astrolabe-v0.10.1 (2026-02-03)

Fix

  • helm: add backward compatibility for legacy persistence configs

astrolabe-v0.10.0 (2026-01-28)

Feat

  • astrolabe: add background token refresh job

Fix

  • astrolabe: add pagination and psalm fixes for token refresh
  • astrolabe: add locking to prevent token refresh race condition
  • astrolabe: add issued_at to on-demand token refresh

astrolabe-v0.9.0 (2026-01-26)

Feat

  • scripts: add database query helpers for development

Fix

  • astrolabe: resolve Psalm type errors in PDF preview code
  • astrolabe: fix Psalm baseline and ESLint import order
  • astrolabe: load pdfjs-dist externally to fix PDF viewer
  • astrolabe: improve error messages for authorization issues
  • astrolabe: rename OAuthController and fix app password check
  • tests: improve Astrolabe integration test reliability
  • astrolabe: update Plotly title attributes for v3 compatibility
  • deps: update dependency plotly.js-dist-min to v3

Refactor

  • api: split management.py into domain-focused modules
  • astrolabe: replace client-side PDF.js with server-side PyMuPDF rendering

astrolabe-v0.8.3 (2026-01-17)

Fix

  • astrolabe: improve token refresh error handling and validation
  • astrolabe: delete stale tokens when refresh fails
  • astrolabe: resolve CI failures for code quality checks
  • astrolabe: use internal URL for OAuth token refresh

Refactor

  • astrolabe: add PHP property types to fix Psalm errors
  • astrolabe: upgrade to @nextcloud/vue 9.3.3 API

astrolabe-v0.8.2 (2026-01-16)

Fix

  • astrolabe: Address reviewer feedback for hybrid mode
  • astrolabe: Fix NcSelect options and CSS loading
  • astrolabe: fix OAuth flow and settings UI for hybrid mode
  • api: return OIDC config in hybrid mode for Astrolabe OAuth flow

astrolabe-v0.8.1 (2026-01-15)

Fix

  • astrolabe: address review feedback for Vue 3 bindings
  • astrolabe: update Vue component bindings for Vue 3 compatibility
  • ci: bump helm chart version when MCP appVersion changes

astrolabe-v0.8.0 (2026-01-15)

Feat

  • Add rate limiting and extract helpers for app password endpoints

Fix

  • astrolabe: define appName and appVersion for @nextcloud/vue
  • Add missing annotations for deck remove/unassign operations
  • auth: Store app passwords locally for multi-user BasicAuth background sync
  • deck: use correct endpoint for reorder_card to fix cross-stack moves
  • deck: Always preserve fields in update_card for partial updates

Refactor

  • Use get_settings() for vector sync enabled check
  • Extract storage helper and improve PHP error handling

astrolabe-v0.7.2 (2025-12-30)

Fix

  • astrolabe: Fix CSS loading for Nextcloud apps

astrolabe-v0.7.1 (2025-12-30)

Fix

  • astrolabe: Fix revoke access button HTTP method mismatch
  • oauth: Enable browser OAuth routes for Management API in hybrid mode
  • mcp: Move all imports to the top of modules

astrolabe-v0.7.0 (2025-12-26)

Feat

  • Remove URL rewriting in favor of proper nextcloud config
  • helm: migrate to new environment variable naming convention
  • Migrate to vue 3
  • astrolabe: upgrade to Vue 3 and @nextcloud/vue 9
  • helm: add support for multi-user BasicAuth mode

Fix

  • tests: Add singleton reset fixture to prevent anyio.WouldBlock errors
  • tests: Fix integration test failures in qdrant, sampling, and rag tests
  • auth: Skip issuer validation for management API tokens
  • Use settings.enable_offline_access for env var consolidation
  • Add required config.py attributes
  • docker: remove overwritehost to fix container-to-container DCR
  • deps: update dependency @nextcloud/vue to v9
  • deps: update dependency vue to v3
  • helm: set OIDC client env vars when using existingSecret
  • helm: trigger chart release workflow on helm chart tags
  • helm: address PR #447 reviewer feedback
  • helm: include MCP server version bumps in changelog pattern

Refactor

  • auth: Decouple BasicAuth and OAuth authentication strategies

astrolabe-v0.6.0 (2025-12-22)

Feat

  • config: enable DCR for multi-user BasicAuth with offline access
  • astrolabe: implement app password provisioning for multi-user background sync
  • config: consolidate configuration with smart dependency resolution (ADR-021)

astrolabe-v0.5.0 (2025-12-20)

Feat

  • auth: add multi-user BasicAuth pass-through mode
  • astrolabe: add dynamic MCP server configuration for testing

Fix

  • config: address reviewer feedback

Refactor

  • config: centralize configuration validation and simplify startup

astrolabe-v0.4.4 (2025-12-20)

Fix

  • astrolabe: screenshots in info.xml

astrolabe-v0.4.3 (2025-12-19)

Fix

  • astrolabe: screenshots in info.xml

astrolabe-v0.4.2 (2025-12-19)

Fix

  • astrolabe: Update screenshots
  • ci: skip existing Helm chart releases to prevent duplicate release errors

astrolabe-v0.4.1 (2025-12-19)

astrolabe-v0.4.0 (2025-12-19)

Feat

  • ci: add --increment flag to bump scripts for manual version control

astrolabe-v0.3.2 (2025-12-19)

Fix

  • astrolabe: add contents:write permission to appstore workflow

astrolabe-v0.3.1 (2025-12-19)

Fix

  • astrolabe: update commitizen pattern to properly update info.xml version

astrolabe-v0.3.0 (2025-12-19)

Fix

  • astrolabe: prevent workflow failure when only helm/astrolabe commits exist
  • astrolabe: info.xml

astrolabe-v0.2.1 (2025-12-19)

BREAKING CHANGE

  • MCP server now bumps for ANY conventional commit except those explicitly scoped to helm or astrolabe.

Fix

  • ci: push all tags explicitly in bump workflow
  • ci: make MCP server default bump target for all non-scoped commits
  • ci: restrict docker build to MCP server tags only
  • ci: correct appstore-push-action version to v1.0.4

astrolabe-v0.2.0 (2025-12-19)

BREAKING CHANGE

  • Search algorithms now require Qdrant to be populated. Vector sync must be enabled and documents indexed for search to work.
  • All OAuth deployments must be reconfigured to specify resource URIs (NEXTCLOUD_MCP_SERVER_URL and NEXTCLOUD_RESOURCE_URI) and choose between multi-audience or token exchange mode.
  • FASTMCP_-prefixed env vars have been replaced by CLI arguments. Refer to the README for updated usage.

Feat

  • ci: implement monorepo-aware version bumping workflow
  • astrolabe: add Nextcloud App Store deployment automation
  • configure commitizen monorepo with independent versioning
  • add Alembic database migration system
  • make chunk modal title clickable link to documents
  • add native Plotly hover styling for clickable points
  • add click interactivity to Plotly 3D scatter chart
  • improve chunk viewer with fixed navigation and markdown rendering
  • astrolabe: enable multi-select for document types and refactor PDF viewer
  • auth: implement refresh token rotation for Nextcloud OIDC
  • astrolabe: enhance unified search and add webhook management
  • astrolabe: add webhook management UI to admin settings
  • astrolabe: add OAuth token refresh and webhook presets
  • search: add file_path metadata and chunk offsets to search results
  • astrolabe: use proper icons and thumbnails in unified search
  • astrolabe: add admin search settings and enhanced UI
  • astrolabe: add unified search provider with clickable file links
  • astrolabe: add 3D PCA visualization for semantic search
  • astrolabe: add Nextcloud PHP app for MCP server management
  • vector-sync: enable background sync in OAuth mode
  • vector: add Deck card vector search with visualization support
  • vector-viz: add news_item support for links and chunk expansion
  • add MCP tool annotations for enhanced UX
  • news: add Nextcloud News app integration
  • Add tag management methods to WebDAV client
  • Add OpenAI provider support for embeddings and generation
  • Add Smithery CLI deployment support
  • Implement ADR-016 Smithery stateless deployment mode
  • Add context expansion to semantic search with chunk overlap removal
  • Use Ollama native batch API in embed_batch()
  • Implement Qdrant placeholder state management
  • Switch files to use numeric IDs with file_path resolution
  • Implement per-chunk vector visualization with context expansion
  • Improve vector visualization with static assets and fixes
  • Redesign UI to match Nextcloud ecosystem aesthetic
  • Replace custom document chunker with LangChain MarkdownTextSplitter
  • viz: Add dual-score display and improve UI controls
  • add configurable fusion algorithms for BM25 hybrid search
  • add chunk position tracking to vector indexing and search
  • add vector viz template and chunk context endpoint
  • add unified provider architecture with Amazon Bedrock support
  • add concurrent uploads and --force flag to upload command
  • implement RAG evaluation framework with CLI tooling
  • Add OpenTelemetry tracing to @instrument_tool decorator
  • Implement BM25 hybrid search with native Qdrant RRF fusion
  • Normalize hybrid search RRF scores to 0-1 range
  • Enhance vector visualization UI and parallelize search verification
  • Add Vector Viz tab to app home page
  • Add vector visualization pane with multi-select document types
  • Implement custom PCA to remove sklearn dependency
  • Add multi-document Protocol with cross-app search support
  • Update nc_semantic_search tool with algorithm selection
  • Implement unified search algorithm module
  • Enable SSE transport for mcp service and update test fixtures
  • Complete Phase 5 - Instrument all 93 MCP tools
  • Add instrumentation decorator and apply to notes tools (Phase 5)
  • Add OAuth token and database metrics (Phases 3-4)
  • Add metrics instrumentation for queue, health, and database operations
  • Add Grafana dashboard and vector sync metric instrumentation
  • ollama: Pull model on startup if not available in ollama
  • add dynamic vector sync status updates with htmx polling
  • add webhook management UI and BeforeNodeDeletedEvent support
  • validate Nextcloud webhook schemas and document findings
  • skip tracing for health and metrics endpoints
  • helm: Add document chunking configuration
  • vector: Add configurable chunk size and overlap for document embedding
  • vector: Support multiple embedding models with auto-generated collection names
  • helm: Add observability support with ServiceMonitor and Grafana dashboard
  • observability: Add comprehensive monitoring with Prometheus and OpenTelemetry
  • helm: add Qdrant local mode support with three deployment options [skip ci]
  • add Qdrant local mode support with in-memory and persistent storage
  • implement ADR-009 - refactor semantic search to use generic semantic:read scope
  • implement MCP sampling for semantic search RAG (ADR-008)
  • add optional vector database and semantic search to helm chart
  • add vector sync processing status to /user/page endpoint
  • implement semantic search tool and fix vector sync issues (ADR-007 Phase 3)
  • implement vector sync scanner and processor (ADR-007 Phase 2)
  • add real elicitation integration test with python-sdk MCP client
  • unify session architecture and enhance login status visibility
  • Implement ADR-005 unified token verifier to eliminate token passthrough vulnerability
  • add scope protection to OAuth provisioning tools
  • enable authorization services for token exchange in Keycloak
  • implement scope-based audience mapping and RFC 9728 support
  • integrate token exchange into MCP server application
  • implement RFC 8693 Standard Token Exchange for Keycloak
  • Add userinfo route/page
  • add browser-based user info page with separate OAuth flow
  • Implement ADR-004 Progressive Consent foundation (partial)
  • Complete ADR-004 Progressive Consent OAuth flows implementation
  • Implement ADR-004 Progressive Consent foundation components
  • Implement ADR-004 Hybrid Flow with comprehensive integration tests
  • Auto-configure impersonation role in Keycloak realm import
  • Implement dual-tier token exchange (Standard V2 + Legacy V1 impersonation)
  • Add Keycloak external IdP integration with custom scopes
  • Implement RFC 8693 token exchange for Keycloak (ADR-002 Tier 2)
  • Add Keycloak OAuth provider support with refresh token storage
  • server: Add /live & /health endpoints
  • Initialize helm chart
  • Add text processing background worker for telling client about progress
  • auth: Add support for client registration deletion
  • Split read/write scopes into app:read/write scopes
  • Enable token introspection for opaque tokens
  • server: Add support for custom OIDC scopes and permissions via JWTs
  • Initialize JWT-scoped tools
  • caldav: Add support for tasks
  • webdav: Add search and list favorite response tools
  • cookbook: Add full Cookbook app support with 13 tools and 2 resources
  • Add Groups API client
  • add sharing API client and server tools
  • server: Experimental support for OAuth2/OIDC authentication
  • users: Initialize user API client
  • server: Add support for streamable-http transport type
  • Add WebDAV resource copy functionality
  • Add WebDAV resource move/rename functionality
  • deck: Add support for stack, cards, labels
  • deck: Initialize Deck app client/server
  • cli: Replace mcp run with click CLI and runtime options
  • client: Preserve fields when modifying contacts/calendar resources
  • server: Add structured output to all tool/resource output
  • contacts: Initialize Contacts App
  • calendar: add comprehensive Calendar app support via CalDAV protocol
  • Update webdav client create_directory method to handle recursive directories
  • webdav: add complete file system support
  • Add TablesClient and associated tools
  • Switch to using async client
  • notes: Add append to note functionality

Fix

  • ci: improve versioning and error handling
  • ci: address critical workflow and validation issues
  • astrolabe: address code review feedback
  • security: address critical security issues from PR #401 code review
  • oauth: enable PKCE for all clients and add token_broker to oauth_context
  • astrolabe: revert invalid files_pdfviewer URL for file links
  • resolve type checking warnings for CI
  • move Alembic to package submodule for Docker compatibility
  • update unified search results to match chunk viz display
  • astrolabe: handle OAuth refresh token rotation
  • address critical code review issues (4 fixes)
  • resolve CI linting issues for Astroglobe
  • news: revert get_item() to use get_items() + filter
  • Disable DNS rebinding protection for containerized deployments
  • deps: update dependency mcp to >=1.23,<1.24
  • address PR review feedback
  • Update lockfile
  • Revert mcp version <1.23
  • resolve all type checking errors (8 errors fixed)
  • deps: update dependency mcp to >=1.23,<1.24
  • deps: update dependency pillow to v12
  • Add rate limit retry logic to OpenAI provider
  • Increase MCP sampling timeout to 5 minutes for slower LLMs
  • Share vector sync state with FastMCP session lifespan via module singleton
  • Share vector sync state with FastMCP session lifespan via module singleton
  • Use WebDAV for tag creation and add LLM-as-a-judge for RAG tests
  • smithery: Enable JSON response format for scanner compatibility
  • smithery: Add JSON Schema metadata to mcp-config endpoint
  • smithery: Use container runtime pattern for config discovery
  • Add Smithery lifespan and auth mode detection
  • Use alpha_composite for proper RGBA highlight blending
  • Remove pymupdf.layout.activate() to fix page_chunks behavior
  • Centralize PDF processing and generate separate images per chunk
  • Set is_placeholder=False in processor to fix search filtering
  • Increase placeholder staleness threshold to 5x scan interval
  • Add placeholder staleness check to prevent duplicate processing
  • Use empty SparseVector instead of None for placeholders
  • Return empty array instead of null for query_coords when no results
  • Align PDF text extraction between indexing and context expansion
  • Update models and viz to use int-only doc_id
  • Reconstruct full content for notes to match indexed offsets
  • Add async/await, PDF metadata, and type safety fixes
  • deps: update dependency mcp to >=1.22,<1.23
  • Improve 3D plot rendering with explicit dimensions and window resize support
  • Preserve 3D plot camera and improve documentation
  • Preserve 3D plot camera position and fix CSS loading
  • prevent infinite loop in DocumentChunker with position tracking
  • Relax SearchResult validation to support DBSF fusion scores > 1.0
  • suppress Starlette middleware type warnings in ty checker
  • download qrels from BEIR ZIP instead of HuggingFace
  • Handle named vectors in visualization and semantic search
  • Update vizApp to use bm25_hybrid algorithm and remove deprecated weights
  • Update viz routes to use BM25 hybrid search after refactor
  • Reorder tabs and fix viz pane session access
  • Use NEXTCLOUD_OIDC_CLIENT_ID/SECRET env vars consistently
  • return all notes when search query is empty
  • Move grafana_folder from labels to annotations
  • add dynamic dimension detection for Ollama embedding models
  • improve webapp tab UI with CSS Grid and viewport-filling container
  • add retry logic for ETag conflicts in category change test
  • optimize Notes API pagination with pruneBefore parameter
  • Support in-memory Qdrant for CI testing
  • helm: Set default strategy to Recreate
  • observability: isolate metrics endpoint to dedicated port
  • readiness: Only check external Qdrant in network mode
  • vector: Handle missing 'modified' field in notes gracefully
  • ci: Use helm dependency build instead of update to use Chart.lock
  • helm: update Qdrant dependency condition to match new mode structure
  • ci: add Helm repository setup to chart release workflow
  • implement deletion grace period and vector sync status tool
  • remove unnecessary urllib3<2.0 constraint
  • integrate vector sync tasks with Starlette lifespan for streamable-http
  • deps: update dependency mcp to >=1.21,<1.22
  • Consolidate OAuth callbacks and implement PKCE for all flows
  • Implement proper OAuth resource parameters and PRM-based discovery
  • Simplify token verifier to be RFC 7519 compliant
  • Use Keycloak client ID for NEXTCLOUD_RESOURCE_URI in token exchange
  • Correct OAuth token audience validation for multi-audience mode
  • deps: update dependency mcp to >=1.20,<1.21
  • add missing await for get_nextcloud_client in capabilities resource
  • use valid Fernet encryption keys in token exchange tests
  • accept resource URL in token audience for Nextcloud JWT tokens
  • remove token-exchange-nextcloud scope and accept tokens without audience
  • move audience mapper from scope to nextcloud-mcp-server client
  • move token-exchange-nextcloud from default to optional scopes
  • restructure routes to prevent SessionAuthBackend from interfering with FastMCP OAuth
  • allow OAuth Bearer tokens on /mcp endpoint by excluding from session auth
  • correct OAuth token audience validation using RFC 8707 resource parameter
  • remove remaining references to deleted oauth_callback and oauth_token
  • remove Hybrid Flow, make Progressive Consent default (ADR-004)
  • browser OAuth userinfo endpoint and refresh token rotation
  • make ENABLE_PROGRESSIVE_CONSENT consistently opt-in (default false)
  • make provisioning checks opt-in (default false)
  • Disable Progressive Consent for mcp-oauth to enable Hybrid Flow tests
  • Complete Keycloak external IdP integration with all tests passing
  • Complete Keycloak external IdP integration with all tests passing
  • Update DCR token_type tests for OIDC app changes
  • helm: Remove image tag overide
  • helm: Update helm chart with extraArgs
  • Update helm chart variables
  • helm: Update helm version with release
  • helm: Update helm version with release
  • helm: Update helm version with release
  • helm: Update helm version with release
  • Trigger release
  • Add support for RFC 7592 client registration and deletion
  • Update webdav models for proper serialization
  • deps: update dependency mcp to >=1.19,<1.20
  • Add CORS middleware to allow browser-based clients like MCP Inspector
  • Use occ-created OAuth clients with allowed_scopes for all tests
  • Separate OAuth fixtures for opaque vs JWT tokens
  • caldav: Fix caldav search() due to missing todos
  • caldav: Check that calendar exists after creation to avoid race condition
  • caldav: Properly parse datetimes as vDDDTypes
  • Increase HTTP client timeout to 30s
  • Handle RequestError in mcp tools
  • deps: update dependency mcp to >=1.18,<1.19
  • deps: update dependency pillow to v12
  • oauth: Remove the option to force_register new clients
  • Update user/groups API to OCS v2
  • deps: update dependency mcp to >=1.17,<1.18
  • deps: update dependency mcp to >=1.16,<1.17
  • deps: update dependency mcp to >=1.15,<1.16
  • docker: Provide --host 0.0.0.0 in default docker image
  • deps: update dependency mcp to >=1.13,<1.14
  • server: Replace ErrorResponses with standard McpErrors
  • notes: Include ETags in responses to avoid accidently updates
  • notes: Remove note contents from responses to reduce token usage
  • model: Serialize timestamps in RFC3339 format
  • client: Use paging to fetch all notes
  • client: Strip cookies from responses to avoid falsely raising CSRF errors
  • calendar: Fix iCalendar date vs datetime format
  • calendar: Remove try/except in calendar API
  • apply ruff formatting to pass CI checks
  • calendar: address PR feedback from maintainer
  • apply ruff formatting to test_webdav_operations.py
  • deps: update dependency mcp to >=1.10,<1.11
  • update tests
  • Commitizen release process
  • Do not update dependencies when running in Dockerfile
  • Configure logging
  • Limit search results to notes with score > 0.5
  • Install deps before checking service
  • deps: update dependency mcp to >=1.9,<1.10

Refactor

  • astrolabe: extract PDF viewer to dedicated component
  • astrolabe: reframe UI as semantic search service
  • news: simplify vector sync to fetch all items
  • Move background tasks to server lifespan and deprecate SSE transport
  • Simplify PDF text extraction with single to_markdown call
  • migrate asyncio to anyio for consistent structured concurrency
  • replace httpx client with NextcloudClient in upload command
  • Optimize Nextcloud access verification with centralized filtering
  • Make all search algorithms query Qdrant payload, not Nextcloud
  • move webapp from /user/page to /app
  • consolidate database storage for webhooks and OAuth tokens
  • simplify OpenTelemetry tracing configuration
  • migrate vector sync from asyncio.Queue to anyio memory object streams
  • update to Qdrant query_points API and fix Playwright Keycloak login
  • Eliminate duplicate validation logic in UnifiedTokenVerifier
  • integrate token exchange into unified get_client() pattern
  • Remove NEXTCLOUD_OIDC_CLIENT_STORAGE environment variable
  • Remove unnecessary user_oidc patch - CORSMiddleware patch is sufficient
  • Unify OAuth configuration to be provider-agnostic
  • Transform document parsing into pluggable processor architecture
  • Update JWT client to use DCR, re-enable tool filtering
  • Migrate from internal CalendarClient to caldav library
  • Unify logging & remove factory deployment
  • Add tools for all resources to enable tool-only workflows
  • Add http to --transport option
  • Use _make_request where available
  • calendar: optimize logging for production readiness
  • Modularize NC and Notes app client

Perf

  • deck: optimize card lookup by storing board_id/stack_id in metadata
  • news: use direct API endpoint for get_item()
  • Optimize vector viz search performance
  • Optimize PDF processing with parallel extraction and single-render highlights
  • Eliminate double-fetching in semantic search sampling
  • fix vector viz search performance and visual encoding
  • make note deletion concurrent in upload --force
  • Exclude vector-sync status polling from distributed tracing
  • notes: Improve notes search performance using async iterators