create_note
Create notes in LunaTask with optional metadata for duplicate detection. Specify notebook, content, date, and source identifiers to organize information.
Instructions
Create a note in LunaTask. Accepts notebook_id, optional name/content, an ISO date_on, and optional source/source_id metadata for duplicate detection. Returns note_id or duplicate status.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | ||
| name | No | ||
| content | No | ||
| date_on | No | ||
| source | No | ||
| source_id | No |
Implementation Reference
- src/lunatask_mcp/tools/notes.py:116-177 (handler)The 'create_note_tool' method within the 'NotesTools' class handles the logic for creating a note. It parses the date, constructs a 'NoteCreate' payload, calls the API client, and returns a structured response indicating success, failure, or duplicate detection.
async def create_note_tool( # noqa: PLR0913 self, ctx: ServerContext, notebook_id: str | None = None, name: str | None = None, content: str | None = None, date_on: str | None = None, source: str | None = None, source_id: str | None = None, ) -> dict[str, Any]: """Create a note in LunaTask with optional duplicate detection.""" await ctx.info("Creating new note") parsed_date: date_class | None = None if date_on is not None: try: parsed_date = date_class.fromisoformat(date_on) except ValueError as error: message = f"Invalid date_on format. Expected YYYY-MM-DD format: {error!s}" await ctx.error(message) logger.warning("Invalid date_on provided for create_note: %s", date_on) return { "success": False, "error": "validation_error", "message": message, } note_payload = NoteCreate( notebook_id=notebook_id, name=name, content=content, date_on=parsed_date, source=source, source_id=source_id, ) try: async with self.lunatask_client as client: note_response = await client.create_note(note_payload) except Exception as error: return await self._handle_lunatask_api_errors(ctx, error, "note creation") if note_response is None: duplicate_message = ( "Note already exists for this source/source_id in the provided notebook" ) await ctx.info("Note already exists; duplicate create skipped") logger.info("Duplicate note detected for notebook=%s", notebook_id) return { "success": True, "duplicate": True, "message": duplicate_message, } await ctx.info(f"Successfully created note {note_response.id}") logger.info("Successfully created note %s", note_response.id) return { "success": True, "note_id": note_response.id, "message": "Note created successfully", } - src/lunatask_mcp/tools/notes.py:314-340 (registration)The 'create_note' MCP tool is registered in the '_register_tools' method of the 'NotesTools' class using the mcp.tool decorator.
async def _create_note( # noqa: PLR0913 ctx: ServerContext, notebook_id: str | None = None, name: str | None = None, content: str | None = None, date_on: str | None = None, source: str | None = None, source_id: str | None = None, ) -> dict[str, Any]: return await self.create_note_tool( ctx, notebook_id, name, content, date_on, source, source_id, ) self.mcp.tool( name="create_note", description=( "Create a note in LunaTask. Accepts notebook_id, optional name/content, " "an ISO date_on, and optional source/source_id metadata for duplicate " "detection. Returns note_id or duplicate status." ), )(_create_note)