From be6c76fa2bb4217ca8dadcb63c0889acb05be3ef Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Mon, 5 May 2025 01:16:51 +0200 Subject: [PATCH] Enable notes_search_results and get_note tools --- nextcloud_mcp_server/client.py | 19 ++++++++++++++++++- nextcloud_mcp_server/server.py | 31 +++++++++++++++++++------------ 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/nextcloud_mcp_server/client.py b/nextcloud_mcp_server/client.py index be07f01..d55f14a 100644 --- a/nextcloud_mcp_server/client.py +++ b/nextcloud_mcp_server/client.py @@ -136,8 +136,25 @@ class NextcloudClient: response.raise_for_status() return response.json() + def notes_search_notes(self, *, query: str): + all_notes = self.notes_get_all() + search_results = [] + query_lower = query.lower() + for note in all_notes: + title_lower = note.get("title", "").lower() + content_lower = note.get("content", "").lower() + if query_lower in title_lower or query_lower in content_lower: + search_results.append( + { + "id": note.get("id"), + "title": note.get("title"), + "category": note.get("category"), + "modified": note.get("modified"), + } + ) + return search_results + def notes_delete_note(self, *, note_id: int): response = self._client.delete(f"index.php/apps/notes/api/v1/notes/{note_id}") response.raise_for_status() return response.json() - diff --git a/nextcloud_mcp_server/server.py b/nextcloud_mcp_server/server.py index 71c5a7e..bd18d59 100644 --- a/nextcloud_mcp_server/server.py +++ b/nextcloud_mcp_server/server.py @@ -42,7 +42,7 @@ def nc_get_capabilities(): ctx = ( mcp.get_context() ) # https://github.com/modelcontextprotocol/python-sdk/issues/244 - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.capabilities() @@ -52,7 +52,7 @@ def notes_get_settings(): ctx = ( mcp.get_context() ) # https://github.com/modelcontextprotocol/python-sdk/issues/244 - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_get_settings() @@ -62,24 +62,24 @@ def nc_notes_get_all(): ctx = ( mcp.get_context() ) # https://github.com/modelcontextprotocol/python-sdk/issues/244 - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_get_all() -@mcp.resource("notes://{note_id}") -def nc_notes_get_note(note_id: int): +# Removed nc_notes_get_note resource + + +@mcp.tool() +def get_note(note_id: int, ctx: Context): """Get user note using note id""" - ctx = ( - mcp.get_context() - ) # https://github.com/modelcontextprotocol/python-sdk/issues/244 - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_get_note(note_id=note_id) @mcp.tool() def nc_notes_create_note(title: str, content: str, category: str, ctx: Context): """Create a new note""" - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_create_note( title=title, content=content, @@ -97,7 +97,7 @@ def nc_notes_update_note( ctx: Context, ): logger.info("Updating note %s", note_id) - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_update_note( note_id=note_id, etag=etag, @@ -107,10 +107,17 @@ def nc_notes_update_note( ) +@mcp.tool() +def nc_notes_search_notes(query: str, ctx: Context): + """Search notes by title or content, returning only id, title, and category.""" + client: NextcloudClient = ctx.request_context.lifespan_context.client + return client.notes_search_notes(query=query) + + @mcp.tool() def nc_notes_delete_note(note_id: int, ctx: Context): logger.info("Deleting note %s", note_id) - client = ctx.request_context.lifespan_context.client + client: NextcloudClient = ctx.request_context.lifespan_context.client return client.notes_delete_note(note_id=note_id)