Jotty MCP Server
Provides programmatic access to notes, checklists, and Kanban task boards via the Model Context Protocol, with multi-user support through per-call API keys.
README
Jotty MCP Server
Model Context Protocol (MCP) server for Jotty — provides programmatic access to notes, checklists, tasks (Kanban boards), and categories.
Features
- Notes: Create, read, update, delete markdown notes
- Checklists: Full checklist management with nested items, priorities, timestamps
- Tasks/Kanban: Kanban-style task boards with custom columns and item status management
- Search: Full-text search across notes and checklists
- Multi-user: API key passed per tool call (not env var) — different users can share the same MCP instance
Setup
Local
pip install -r requirements.txt
Stdio mode (default — for local editors/tools like Claude Desktop, Cursor):
JOTTY_BASE_URL=https://jotty.showaib.com python -m src.main
HTTP mode (for remote MCP clients):
JOTTY_BASE_URL=https://jotty.showaib.com PORT=3008 python -m src.main --transport http
Docker
# Stdio mode (default — local CLI)
docker compose up --build -d jotty-mcp
# HTTP mode (remote clients)
MCP_TRANSPORT=http docker compose up --build -d jotty-mcp
Server is available at http://localhost:3008/mcp when using HTTP transport. Connect with any MCP HTTP client.
Configuration
| Variable | Default | Description |
|---|---|---|
JOTTY_BASE_URL |
http://localhost:3000 |
URL of your Jotty instance |
MCP_TRANSPORT |
stdio |
Transport mode (stdio or http) |
PORT |
3008 |
HTTP server port (docker-compose uses host networking) |
Note: The API key is not an environment variable — it is passed per-tool call to support multiple users.
MCP Tools
Notes
| Tool | Description |
|---|---|
list_notes(api_key, category?, q?) |
List notes with optional category filter and search |
get_note(api_key, note_id) |
Get a single note by ID |
create_note(api_key, title, content?, category?) |
Create a new note (content supports Markdown) |
update_note(api_key, note_id, title?, content?, category?) |
Update a note (provide only fields to change) |
delete_note(api_key, note_id) |
Delete a note by ID |
Checklists
| Tool | Description |
|---|---|
list_checklists(api_key, category?, checklist_type?, q?) |
List checklists with optional filters (checklist_type: simple/task) |
get_checklist(api_key, list_id) |
Get a single checklist by ID |
create_checklist(api_key, title, category?, checklist_type?) |
Create a new checklist (use checklist_type='task' for Kanban) |
delete_checklist(api_key, list_id) |
Delete a checklist by ID |
Checklist Items
| Tool | Description |
|---|---|
add_checklist_item(api_key, list_id, text, parent_index?, status?) |
Add item to checklist (use parent_index for nesting) |
update_checklist_item(api_key, list_id, item_index, text?, description?, priority?, score?, start_date?, target_date?, estimated_time?) |
Update item fields |
delete_checklist_item(api_key, list_id, item_index) |
Delete an item by index path (e.g., "0", "0.1") |
check_checklist_item(api_key, list_id, item_index) |
Mark item as completed |
uncheck_checklist_item(api_key, list_id, item_index) |
Mark item as incomplete |
reorder_checklist_items(api_key, list_id, active_item_id, over_item_id, position?, is_drop_into?) |
Reorder items (before/after/nest) |
Tasks (Kanban)
| Tool | Description |
|---|---|
list_tasks(api_key, category?, status?, q?) |
List Kanban task boards |
get_task(api_key, task_id) |
Get a single Kanban board by ID |
create_task(api_key, title, category?, statuses?) |
Create a Kanban board (statuses: optional JSON string of columns) |
update_task(api_key, task_id, title?, category?) |
Update board metadata (title or category only) |
delete_task(api_key, task_id) |
Delete a Kanban board by ID |
Kanban Columns (Statuses)
| Tool | Description |
|---|---|
get_task_statuses(api_key, task_id) |
Get all Kanban columns for a board |
add_task_status(api_key, task_id, status_id, label, color?, order?) |
Add a new Kanban column |
update_task_status(api_key, task_id, status_id, label?, color?, order?) |
Update a column's properties |
delete_task_status(api_key, task_id, status_id) |
Delete a column (items move to first available) |
Task Items
| Tool | Description |
|---|---|
create_task_item(api_key, task_id, text, status?, parent_index?) |
Add item to a Kanban board |
get_task_item(api_key, task_id, item_index) |
Get an item by index |
update_task_item_status(api_key, task_id, item_index, status) |
Move item to different column |
delete_task_item(api_key, task_id, item_index) |
Delete an item by index |
General
| Tool | Description |
|---|---|
search_jotty(api_key, q, search_type?) |
Full-text search across notes and checklists (search_type: note/checklist) |
get_categories(api_key) |
Get all categories organized by type |
get_summary(api_key, username?) |
Get user statistics (note/checklist counts, completion rates) |
Example Usage
# List all notes for a user
mcp.list_notes(
api_key="user1-api-key-here",
category="Work"
)
# Create a note
mcp.create_note(
api_key="user1-api-key-here",
title="Meeting Notes",
content="# Weekly Sync\n- Discussed roadmap\n- Action items...",
category="Work"
)
# Add item to checklist
mcp.add_checklist_item(
api_key="user2-api-key-here",
list_id="<checklist-uuid>",
text="Review PRs",
status="in_progress"
)
# Move task between Kanban columns
mcp.update_task_item_status(
api_key="user1-api-key-here",
task_id="<task-uuid>",
item_index="0",
status="in_progress"
)
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.