{
  "markdown": "# upnote-lens-mcp\n\n<!-- mcp-name: io.github.AwesomeHye/upnote-lens-mcp -->\n\nA hybrid MCP server that lets your AI assistant work with your UpNote notes:\n\n- **🔍 Find & search** notes by keyword across titles and bodies.\n- **📖 Read & summarize** — it returns the *actual note text*, so the AI can\n  summarize, analyze, or answer questions about what you've written.\n- **✍️ Create** new notes from the chat.\n\nUnder the hood: reads come from the local UpNote SQLite database (**read-only**),\nso real content comes back as text; writes go through the `upnote://` URL scheme\n(x-callback-url) and **never touch the database**.\n\n> The write side (URL scheme) is based on [chadthornton/upnote-mcp](https://github.com/chadthornton/upnote-mcp) (MIT).\n\n## Usage\n\nOnce it's registered, just talk to your AI assistant in plain language — it\npicks the right tool for you. No commands or syntax to memorize. For example:\n\n- \"Summarize my UpNote notes about the Q3 roadmap.\"\n- \"Find notes where I mentioned Postgres tuning and pull out the key points.\"\n- \"What did I write about onboarding last month?\"\n- \"Show me my 5 most recent notes.\"\n- \"Create a note titled 'Standup 6/4' with today's three priorities.\"\n\nReading, searching, summarizing, and creating all happen through natural\nconversation.\n\n## Requirements\n\n- **macOS** — fully supported and verified.\n- **Windows** — best-effort. URLs launch through the registered scheme handler,\n  and the default DB path is guessed under `%APPDATA%\\UpNote\\`. This path is\n  **not verified** by the author — if reads fail, set `UPNOTE_LENS_DB` (see below).\n- Python 3.10+ (or just [uv](https://docs.astral.sh/uv/), which brings its own).\n- UpNote desktop app installed.\n\n## Install & register\n\n### 🤖 Let AI install it (easiest)\n\nGive your MCP client (Claude, etc.) a link to\n[`llms-install.md`](llms-install.md) and it will run the steps and set everything\nup for you.\n\n### 🧑 Install it yourself\n\nPick the first option that fits what you already have. Each option includes how\nto register it in Claude.\n\n> **Claude Desktop config file** (referenced in each option):\n> - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n> - Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n#### Option 1 — with uv (recommended)\n\nRequires [uv](https://docs.astral.sh/uv/) installed once\n(`brew install uv`, or `curl -LsSf https://astral.sh/uv/install.sh | sh`).\nAfter that there's **no package install step** — `uvx` downloads, caches, and\nruns upnote-lens-mcp on demand.\n\nClaude Code:\n```bash\nclaude mcp add upnote-lens -- uvx upnote-lens-mcp\n```\nClaude Desktop:\n```json\n{ \"mcpServers\": { \"upnote-lens\": { \"command\": \"uvx\", \"args\": [\"upnote-lens-mcp\"] } } }\n```\n\n#### Option 2 — with pip (if you don't have uv)\n\n```bash\npip install upnote-lens-mcp\n```\n\nClaude Code:\n```bash\nclaude mcp add upnote-lens -- upnote-lens-mcp\n```\nClaude Desktop:\n```json\n{ \"mcpServers\": { \"upnote-lens\": { \"command\": \"upnote-lens-mcp\" } } }\n```\n\n#### Option 3 — from GitHub over HTTPS (if you don't have pip)\n\nWhen you can't use PyPI/pip, install straight from the repo with uv. (No uv yet?\n`curl -LsSf https://astral.sh/uv/install.sh | sh`.)\n\nClaude Code:\n```bash\nclaude mcp add upnote-lens -- uvx --from git+https://github.com/AwesomeHye/upnote-lens-mcp upnote-lens-mcp\n```\nClaude Desktop:\n```json\n{ \"mcpServers\": { \"upnote-lens\": { \"command\": \"uvx\", \"args\": [\"--from\", \"git+https://github.com/AwesomeHye/upnote-lens-mcp\", \"upnote-lens-mcp\"] } } }\n```\n\n## Tools\n\n### Read (queries the local DB → returns real text)\n\n| Tool | Description |\n|---|---|\n| `search_notes(query, limit=20)` | Substring search over title/body. Returns id, title, updated time, snippet |\n| `get_note(note_id, include_html=False)` | Full title + body text of a note (optionally raw HTML) |\n| `list_recent(limit=20)` | Most recently updated notes |\n| `list_notebooks()` | Notebooks with note counts and parent |\n| `list_notes_in_notebook(notebook_id, limit=50)` | Notes inside a notebook |\n| `list_tags()` | Tags with note counts |\n| `list_notes_by_tag(tag_title, limit=50)` | Notes carrying a tag |\n\n### Write (`upnote://` URL scheme)\n\n| Tool | Description |\n|---|---|\n| `create_note(title, content, notebook?, markdown=True, new_window=False)` | Create a note. `content` is Markdown by default. `notebook` matches by name. **Tags can't be set** (see below) |\n| `open_note(note_id, new_window=False)` | Open an existing note in the app |\n| `open_notebook(notebook_id)` | Open a notebook in the app |\n\n> **Tag limitation**: UpNote's `note/new` URL scheme has no tag parameter, and\n> hashtags placed in the body stay as plain text rather than becoming real tags\n> (they only convert to tags when typed in the editor). If you need tags, add\n> them manually in the app after the note is created.\n\n## Override the DB path\n\nIf the database isn't in the default location (or you're on Windows), point at it\nwith an environment variable:\n\n```\nUPNOTE_LENS_DB=/path/to/upnote.sqlite3\n```\n\nDefault paths:\n- macOS: `~/Library/Containers/com.getupnote.desktop/Data/Library/Application Support/UpNote/upnote.sqlite3`\n- Windows (best guess): `%APPDATA%\\UpNote\\upnote.sqlite3`\n\n## License\n\nMIT. See [LICENSE](LICENSE) for details.\nThe URL-scheme formats and launch approach on the write side are adapted from\nchadthornton/upnote-mcp (MIT).\n",
  "bytes": 5319,
  "sha": "a0f63734d9eab3b902445c36125c94dff1f7d8c7d5aa6b6e427c13876c5bd3dc",
  "repo_slug": "awesomehye/upnote-lens-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_awesomehye_upnote_lens_mcp_eab23b7f/readme"
}